Hallo
Vielleicht kann mir jemand helfen:
Seit mehreren Monaten benutze ich einen selbstgeschriebenen PHP-Counter auf Textdateibasis.
Dabei tritt in rein zufälligen Zeitabständen das Problem auf, das der Counterstand auf 0 gesetzt wird,
was natürlich nicht sein darf. Ich komme einfach nicht dahinter, warum das so ist.
Hat jemand eine Idee woran es liegen könnte?
Hier der komplette Quellcode des Counters:
Vielleicht kann mir jemand helfen:
Seit mehreren Monaten benutze ich einen selbstgeschriebenen PHP-Counter auf Textdateibasis.
Dabei tritt in rein zufälligen Zeitabständen das Problem auf, das der Counterstand auf 0 gesetzt wird,
was natürlich nicht sein darf. Ich komme einfach nicht dahinter, warum das so ist.
Hat jemand eine Idee woran es liegen könnte?
Hier der komplette Quellcode des Counters:
PHP-Code:
<?php
/* --------------------------- KONFIGURATION ------------------------------ */
$pfad = "counter/"; /* Pfad zum Counterordner */
$counter = 0; /* Counter Startwert */
$sperrzeit = 3600; /* IP-Sperrzeit in Sekunden */
/* --------------------------- KONFIGURATION ENDE ------------------------- */
$ip = getenv("REMOTE_ADDR");
$max = 1000;
$zeit = time();
$ip_exist = false;
/* --------------------------- Neue Datei anlegen ------------------------- */
if(!file_exists($pfad."counter.txt"))
{
$counter++;
$daten = array();
$daten[0] = $counter;
$daten[1] = $ip;
$daten[2] = $zeit;
$teile = implode("|", $daten);
$handle = @fopen($pfad."counter.txt", "a");
@fputs($handle, $teile);
@fclose($handle);
}
/* --------------------------- Daten aus Datei lesen ---------------------- */
$read_handle = @fopen($pfad."counter.txt", "r+");
@flock($read_handle,LOCK_SH);
$daten = @fgets($read_handle);
@flock($read_handle,LOCK_UN);
@fclose($read_handle);
$teile = explode("|", $daten);
$anzahl = count($teile);
/* -- Datei aufräumen, wenn bestimmte Besucheranzahl überschritten wird --- */
if($anzahl > $max)
{
for($n=1; $n<$anzahl; $n++)
{
unset ($teile[$n]);
}
$anzahl = 1;
}
/* -- Prüfen, ob IP schon gespeichert und dessen Sperrzeit überschritten ist -- */
for($n=1; $n<$anzahl; $n++)
{
if($teile[$n] == $ip)
{
$ip_exist = true;
if($zeit > $teile[$n+1]+$sperrzeit)
{
$ip_exist = false;
unset ($teile[$n]);
unset ($teile[$n+1]);
break;
}
}
}
/* --------------------------- Daten ändern & speichern ------------------- */
if($read_handle == true)
{
if($ip_exist == false)
{
$teile[0]++;
$teile[] = $ip;
$teile[] = $zeit;
$daten = implode("|", $teile);
$handle = @fopen($pfad."counter.txt", "w");
@flock($handle,LOCK_EX);
@fputs($handle, $daten);
@flock($handle,LOCK_UN);
@fclose($handle);
}
echo $teile[0];
}
?>
Kommentar