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