frankx: Eigener Counter

Beitrag lesen

Hellihello frankx,

Ich möchte nur stumpf die anzahl der Leute auf der Seite anzeigen.

$counter=file_get_contents("counter.txt");
$counter++;
file_put_contents("counter.txt",$counter);


>   
> Damit zählt er Seitenabrufe, aber nicht Besucher- oder Besuchszahlen, mal ganz zu schweigen davon, dass solche öffentlich einsehbaren Zähler zur Manipulation einladen und man von daher genauso gut irgendeine Phantasiezahl ausgeben könnte.  
>   
> Das Mindeste für einen Besuchszähler ist eine IP-Sperre, für Besucherzahlen muss er jedem Besucher eine eindeutige Häftlingsnummer auf die Stirn stempeln (lies: langlebiges Cookie mit Seriennummer setzen).  
  
Naja, er sprach von "stumpf". Das Ding ist ja auch erweiterbar.  
Irgendwas in der Art:  
~~~php
  
<?php  
class My_Counter {  
 private $Sperrzeit = "30";  
  
 // mit Ordnerangabe "php/... - wird ja im übergeordneten Ordner includiert  
 private $CounterstandDatei = "php_counter/Counterstand.txt";  
 private $IpSperrDatei = "php_counter/IpSperrDatei.ser.txt";  
  
 //Variablendeklaration  
 private $IpListe=array();  
 private $Counterstand="";  
 private $DeletedList=array();  
  
 //Konstruktor, wird beim Aufruf "new My_Counter" ausgeführt  
 function __construct() {  
  //liest den Inhalt aus der Counterstanddatei  
  $this->Counterstand=file_get_contents($this->CounterstandDatei);  
  
  // wenn die Funktion CheckIpListe "true" zurückgibt, wird der Counter geupdated  
  if ($this->CheckIpListe()) {  
   $this->updateCounter();  
  }  
 }  
  
 // Checked die Ip-Zeit-Liste  
 private function CheckIpListe() {  
  
  //liest das serialisierte Datenarray mittels unserialize  
  $this->IpListe=unserialize(file_get_contents($this->IpSperrDatei));  
  
  // steht da nix drin, wird ein Array erstellt (vermeidung von Fehlermeldung)  
  if ($this->IpListe === false) {  
   $this->IpListe=array();  
  }  
  
  //aktuelleZeit holen,  
  $aktuelleZeit=time();  
  
  //default für Rückgabewert  
  $counter_erhoehen=true;  
  
  // geht die Liste der Ip-Zeit-Angaben durch  
  foreach ($this->IpListe as $Position => $EintragsInhalt) {  
  
   // gibt true, wenn die aktuelle Zeit größer als die gespeicherte plus Sperrzeit ist  
   $Sperrzeit_abgelaufen = ($EintragsInhalt["Zeit"]  + $this->Sperrzeit < $aktuelleZeit);  
  
   //gibt true, wenn die gespeichert Ip-Adresse gleich der aktuellen ist  
   $gleicheIpAdresse= ($EintragsInhalt["IpAdresse"] == $_SERVER ["REMOTE_ADDR"]);  
  
   // wenn Sperrzeit abgelaufn  
   if ($Sperrzeit_abgelaufen) {  
    //Eintrag aus Liste löschen  
    $this->DeletedList[]=$this->IpListe[$Position];  
    unset($this->IpListe[$Position]);  
   }  
  
   //ansonsten wenn Ip-Adressen gleich  
   elseif ($gleicheIpAdresse) {  
    //Rückgabe auf falsch setzen  
    $counter_erhoehen=false;  
   }  
  } // end foreach  
  
  //neuen Eintrag (als Hash) in die Liste machen nach dem Muster IpListe[Nr]["Zeit"] und IpListe[Nr]["IpAdresse"];  
  $this->IpListe[] = array ("Zeit"=>time(), "IpAdresse"=>$_SERVER ["REMOTE_ADDR"]);  
  // Liste serialisiert abspeichern  
  file_put_contents($this->IpSperrDatei,serialize($this->IpListe));  
  
  //zurückgeben, ob counter erhöht werden soll (true/false)  
  return $counter_erhoehen;  
 }  
  
 // counter erhöhen und abspeichern (unserialisiert, schlicht als text zahl)  
 private function updateCounter() {  
  $this->Counterstand++;  
  file_put_contents($this->CounterstandDatei,$this->Counterstand);  
 }  
  
 //Rückgabe des aktuellen Stands  
 public function counterStand() {  
  return $this->Counterstand;  
 }  
  
 public function showStatus() {  
  echo "Sperrzeit ist ".$this->Sperrzeit."<br>";  
  echo "Deine_IP ist ". $_SERVER["REMOTE_ADDR"]."<br>";  
  echo "gelöscht wurden : <pre>";  
  var_dump($this->DeletedList);  
  echo "</pre><br>in der Liste stehen noch : <pre>";  
  var_dump($this->IpListe);  
  echo "</pre>";  
 }  
}  
$My_Counter=new My_Counter();  
echo $My_Counter->Counterstand();  
?>  

Exitenz mit korrekten Rechten und Inhalt von IpSperrDatei.ser.txt und counter_neu.txt vorausgesetzt, im Ordner php_counter/.

Dank und Gruß,

frankx