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