Counter beginnt von vorne :(

Cusco

Erfahrenes Mitglied
Hi,

mein Counter fängt alle paar Tage wieder neu zu zählen an, sobald etwas Last auf den code kommt, warscheinlich 2 oder mehr Zugriffe zur gleichen Zeit, wie kann ich das verhindern. Der Code muss aber so sein das wenn noch keine Datei existiert, eine neue angelegt wird.

Hier ein Teil des Codes:

Code:
  $datei = fopen($filename, "r");
  $res = flock ($datei, LOCK_SH);
  $counter = (int) fgets($datei,10);
  $sldatum = (string) fgets($datei,20);
  $ssdatum = str_replace("\r\n","",$sldatum);
  flock ($datei, LOCK_UN);
  fclose ($datei);

  if($ssdatum==""){
    $ssdatum = date("d.m.Y");
  }

  $counter++;

  $datei = fopen($filename, "w");
  flock ($datei, LOCK_EX);
  fwrite($datei,$counter."\r\n");
  fwrite($datei,$ssdatum."\r\n");
  fwrite($datei,date("d.m - H:i:s"));
  flock ($datei, LOCK_UN);
  fclose ($datei);
 
Hallo!

Könntest du bitte auch den Aufbau des Counters erklären? Ich versteh deinen Code nicht wirklich (evtl. ein Beispiel wie der Counter aussieht?)
 
Hallo!

Könntest du bitte auch den Aufbau des Counters erklären? Ich versteh deinen Code nicht wirklich (evtl. ein Beispiel wie der Counter aussieht?)

Das ist ja auch nicht der Komplette Code, sondern nur das laden, Zählen und speichern, es werden die Pageviews gezählt, eingesetz wird der Counter wird auf z.B. auf http://www.goldsammler.eu am ende der Seite er gibt dann das Datum der Startzeit, die Gesamtzahl Taganzahl und den Durchschnitt aus. Das phpscript generiert eine Javascript datei eben mit diesen daten

Aktuell wird dieser Text gezeigt:
"Pageviews dieser Einzelseite: 3,352 seit dem 20.09.2007
(20,61 Tage = 162,65 Aufrufe im Schnitt)"
 
Zuletzt bearbeitet:
also ich glaube nicht, dass der auftretende fehler aus diesem codeteil stammt. sieht für mich in ordnung aus.

ich würde aber evtl. mal versuchen abzufragen, ob die datei bereits existiert, wenn nicht, sie anlegen, ansonsten auf en locking überprüfen und erst dann daten auslesen bzw. neu schreiben.
 
PHP:
w
würd ich durch
PHP:
a+
ersetzen

€: kannste ma das ganze script posten? bräucht auch ma so nen einfaches ding mit ner textdatei und hab dess noch nich so drauf....
 
Zuletzt bearbeitet:
wenn er "w" durch "a+" ersetzt, erreicht er glaub ich nicht das, was er will. er fragt die datei ja vorher ab. das problem könnte halt wirklich sein, wenn 2 leute genau gleichzeitig zugreifen. man müsste das ganze gesteuert serialisieren.

der beschriebene effekt dürfte durch die lösung a+ für w eigentlich nicht gelöst werden denke ich.
 
wenn er "w" durch "a+" ersetzt, erreicht er glaub ich nicht das, was er will. er fragt die datei ja vorher ab. das problem könnte halt wirklich sein, wenn 2 leute genau gleichzeitig zugreifen. man müsste das ganze gesteuert serialisieren.

der beschriebene effekt dürfte durch die lösung a+ für w eigentlich nicht gelöst werden denke ich.

Warscheinlich läuft das so ab: Der lese Zugriff schlägt fehl, dann legt das skript die Datei an, mit Counter = 1 und neuen Datum.

wenn er "w" durch "a+" ersetzt, erreicht er glaub ich nicht das, was er will. er fragt die datei ja vorher ab. das problem könnte halt wirklich sein, wenn 2 leute genau gleichzeitig zugreifen. man müsste das ganze gesteuert serialisieren.

der beschriebene effekt dürfte durch die lösung a+ für w eigentlich nicht gelöst werden denke ich.

Ich habe das jetzt so gelöst ich hoffe das Funktioniert

Code:
if(($counter > 1) || (file_exists($filename)==FALSE))
  {
     $datei = fopen($filename, "w");
     flock ($datei, LOCK_EX);
     fwrite($datei,$counter."\r\n");
     fwrite($datei,$ssdatum);
     fwrite($datei,date("d.m - H:i:s"));
     flock ($datei, LOCK_UN);
     fclose ($datei);
  }

Edit: noch ne Frage ist der Lock und UNLOCK beim schreiben und Lesen richtig gesetzt? Ich habe das vom User Online Skript von SelfHTML

Ein etwas anderer Counter wird hier eingesetzt, es passieren bis zu 2600 Zugriffe am Tag, das macht ca 2-3 die Minute, da ist der Fehler aufgetreten schon 3 Mal innerhalb von ca 2 Wochen. http://www.goldsammler.eu/popup/popup.htm
 
Zurück