Tom: Counter zählt falsch?

Beitrag lesen

Hello,

Ist Code vielleicht falsch?

Er ist zumindest unvollständig.
Eine Webseite ist normalerweise ein Multi-User-Objekt. Da die Webserver im Regelfall durchaus 150 parallele Prozesse darauf zulassen, muss man sich also um eine Strategie für gemeinsame Nutzung kümmern.

<?php

War die datei schon da?

sonst sollte man ein

$fp=fopen("count.txt","a");
fclose($fp);

voransetzen

#> $fp=fopen("count.txt","r+");

besser:

$fp=fopen("count.txt","rb+");

da auch Textorientierte OS dann die Datei binär öffen

#(was bei PHP allerdings hier nicht unbedingt erforderlich ist, da selten

binäre Speicherung von Zahlen stattfindet, sondern diese als ASCII-Zeichen abgelegt werden

jetzt muss man aber erst ein LOCK beantragen

flock($fp,LOCK_EX);

$counter=fgets($fp,100);

if (mktime(0,0,0)>filemtime("count.txt"))

wozu ist die Zeile da, wenn Du die Datei doch vorhin gar nicht neu angelegt hast?

{
    $counter = 1;
}
else
{
    $counter++;
}
echo $counter;
rewind($fp);
fputs($fp,$counter);
fclose($fp);
?>

Ordentliche Fehlerbehandlung müsste noch eingebaut werden!

Außerdem solltest Du keine unstrukturierten Daten ablegen.
Wenn Du den Einwand von Rouven berücksichtigen willst, dass ein Zugriff von derselben IP auf den Counter innerhalb z.B. 30 Sekunden abgewehrt werden soll, dann musst Du schon mehr als eine einzige Zahl abspeichern. Dafür eignen sich serialiserte assoziative Arrays.

Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau