Counter zählt falsch?
Steffi
- php
Hallo,
ich habe einen Hit Counter erstellt, aber er zählt falsch. Am morgen hatte ich 78 Hits, stattdessen irgendwas mit 200 Hits.
Ist Code vielleicht falsch?
<?php
$fp=fopen("count.txt","r+");
$counter=fgets($fp,100);
if (mktime(0,0,0)>filemtime("count.txt"))
{
$counter = 1;
}
else
{
$counter++;
}
echo $counter;
rewind($fp);
fputs($fp,$counter);
fclose($fp);
?>
LG
Steffi
Hallo,
Sehe ich das richtig, dass dein Counter ohne Rücksicht auf Session oder IP-Adresse oder sonstiges einfach bei jedem Aufruf hochzählt? Wenn ja, schon mal über einen Crawler einer Suchmaschine nachgedacht? Der könnte beim einmalige Ablaufen der Seite direkt dutzende Hits verursachen.
MfG
Rouven
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
$fp=fopen("count.txt","a");
fclose($fp);
#> $fp=fopen("count.txt","r+");
$fp=fopen("count.txt","rb+");
#(was bei PHP allerdings hier nicht unbedingt erforderlich ist, da selten
flock($fp,LOCK_EX);
$counter=fgets($fp,100);
if (mktime(0,0,0)>filemtime("count.txt"))
{
$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