PHP Zähler Problem
PHP Zähler Problem
Hallo,
ich habe ein Problem mit einem php-Zähler, den ich in das phpbb eingebaut habe.
Zur Funktion:
Der Code des Zähler steht in der Page_Header.php
Bei jedem Seitenaufruf wird eine Zahl aus einer Datei geladen, um eins erhöht und wieder in die Datei gespeichert. Dies Funktioniert auch.
Problem:
Es tritt ab und zu auf, dass die Datei, in der die Zählerzahl steht, gar nichts mehr enthält ("").
Ich nehme an, die Usache liegt darin, dass 2 Seitenbesucher gleichzeitig auf die Datei zugreifen. Aber auch damit kann ich mir das nicht wirklich erklären.
Hat wer eine Idee, woran es liegt und/oder was man dagegen unternehmen kann?
Gruß
Xelos
ich habe ein Problem mit einem php-Zähler, den ich in das phpbb eingebaut habe.
Zur Funktion:
Der Code des Zähler steht in der Page_Header.php
Bei jedem Seitenaufruf wird eine Zahl aus einer Datei geladen, um eins erhöht und wieder in die Datei gespeichert. Dies Funktioniert auch.
Problem:
Es tritt ab und zu auf, dass die Datei, in der die Zählerzahl steht, gar nichts mehr enthält ("").
Ich nehme an, die Usache liegt darin, dass 2 Seitenbesucher gleichzeitig auf die Datei zugreifen. Aber auch damit kann ich mir das nicht wirklich erklären.
Hat wer eine Idee, woran es liegt und/oder was man dagegen unternehmen kann?
Gruß
Xelos
Versuche es mal mit folgendem:
http://de3.php.net/manual/de/function.flock.php
http://de3.php.net/manual/de/function.flock.php
Hier mal der Zähler, wie er im Moment eingebaut ist:
Mit flock würde er dann ja so aussehen:
- Ist das Problem damit nicht nur verschoben?
Wenn nun ein User versucht, die Datei zu öffnen, während diese geschrieben wird, so würde er doch eine Fehlermeldung bekommen?
- Warum passiert es überhaupt bei der ersten Variante?
- Wie könnte ich den Zähler absichern, so das weder der Fehler mit der leeren Datei noch der User eine Fehlermeldung erhält, wenn 2 gleichzeitig den Zähler schreiben.
Ich hoffe mir kann wer helfen. Ich kann diesen Fehler leider nicht simulieren um es auszutesten. Er tritt meist einmal pro Tag auf.
Gruß
Xelos
Code: Alles auswählen
$datei1 = "allehits.log";
//Gesamtzähler auslesen
if (file_exists($datei1)) {
$oeffnen = fopen($datei1, "r");
$allehits = fread($oeffnen, filesize($datei1));
fclose($oeffnen);
}
//Zähler erhöhen
$allehits++;
//Gesamtzähler speichern
if (file_exists($datei1)) {
$oeffnen = fopen($datei1, "w");
fwrite($oeffnen, $allehits);
fclose($oeffnen);
}
Code: Alles auswählen
$datei1 = "allehits.log";
//Gesamtzähler auslesen
if (file_exists($datei1)) {
$oeffnen = fopen($datei1, "r");
$allehits = fread($oeffnen, filesize($datei1));
fclose($oeffnen);
}
//Zähler erhöhen
$allehits++;
//Gesamtzähler speichern
if (file_exists($datei1)) {
$oeffnen = fopen($datei1, "w");
flock($oeffnen,2);
fwrite($oeffnen, $allehits);
flock($oeffnen,3);
fclose($oeffnen);
}
Wenn nun ein User versucht, die Datei zu öffnen, während diese geschrieben wird, so würde er doch eine Fehlermeldung bekommen?
- Warum passiert es überhaupt bei der ersten Variante?
- Wie könnte ich den Zähler absichern, so das weder der Fehler mit der leeren Datei noch der User eine Fehlermeldung erhält, wenn 2 gleichzeitig den Zähler schreiben.
Ich hoffe mir kann wer helfen. Ich kann diesen Fehler leider nicht simulieren um es auszutesten. Er tritt meist einmal pro Tag auf.
Gruß
Xelos
-
- Mitglied
- Beiträge: 129
- Registriert: 18.11.2003 18:15
- Wohnort: Schnaitsee
- Kontaktdaten:
-
- Mitglied
- Beiträge: 129
- Registriert: 18.11.2003 18:15
- Wohnort: Schnaitsee
- Kontaktdaten:
Wie soll ich den Zähler den umprogrammieren? Ich kann die Cookies ausschalten und funktionen einbauen. Schreibe wie du es willst. EDIT:Achja, ich muss nur die echo ausgabe ausschalten und schon funktioniert das so wie du willst!
Danny
Danny
Zuletzt geändert von dannyjansen am 07.09.2004 12:29, insgesamt 1-mal geändert.
Also ich finde die MySQL Variante ja schon besser. Wenn Xelos eine MySQL Datenbank zur Verüfgung hat, dann soll er doch diese benutzen. Allein das Verwalten ist schon viel einfacher als in einer .txt Datei oder irgendeiner anderen Datei.dannyjansen hat geschrieben:Wie soll ich den Zähler den umprogrammieren? Ich kann die Cookies ausschalten und funktionen einbauen. Schreibe wie du es willst.
Danny
Außerdem kannst du mit MySQL gleich noch die IPs aufzeichnen lassen und somit verhindern, dass bei jedem Seitenaufruf der selben Person +1 gerechnet wird.
Mit freundlichen Grüßen,
Dani
Ihr wohnt im Süd-Westen Deutschlands?
|- Nehmt an der Schwäbischen phpBB Usergroup teil!
|- Nehmt an der Schwäbischen phpBB Usergroup teil!
-
- Mitglied
- Beiträge: 129
- Registriert: 18.11.2003 18:15
- Wohnort: Schnaitsee
- Kontaktdaten:
Dafür habe ich ja die Cookie speere eingebaut. Teste es unter: www.danny-jansen.de/counter.php
Meiner Meinung nach sollte man counter nicht auf MySQL laufen lassen weil es gefahr läuft das es dann db Probleme gibt, und/oder die DB zugroß wird.
Danny
Meiner Meinung nach sollte man counter nicht auf MySQL laufen lassen weil es gefahr läuft das es dann db Probleme gibt, und/oder die DB zugroß wird.
Danny
Da bist du aber mit Dateien schlechter bedient. Diese werden auch ziemlich schnell groß. Denke, man kann sich darüber streiten welches System besser ist...dannyjansen hat geschrieben:Dafür habe ich ja die Cookie speere eingebaut. Teste es unter: www.danny-jansen.de/counter.php
Meiner Meinung nach sollte man counter nicht auf MySQL laufen lassen weil es gefahr läuft das es dann db Probleme gibt, und/oder die DB zugroß wird.
Danny

Mit freundlichen Grüßen,
Dani
Ihr wohnt im Süd-Westen Deutschlands?
|- Nehmt an der Schwäbischen phpBB Usergroup teil!
|- Nehmt an der Schwäbischen phpBB Usergroup teil!
-
- Mitglied
- Beiträge: 129
- Registriert: 18.11.2003 18:15
- Wohnort: Schnaitsee
- Kontaktdaten:
Beides hat vor und nachteile.DaniM hat geschrieben:Da bist du aber mit Dateien schlechter bedient. Diese werden auch ziemlich schnell groß. Denke, man kann sich darüber streiten welches System besser ist...dannyjansen hat geschrieben:Dafür habe ich ja die Cookie speere eingebaut. Teste es unter: www.danny-jansen.de/counter.php
Meiner Meinung nach sollte man counter nicht auf MySQL laufen lassen weil es gefahr läuft das es dann db Probleme gibt, und/oder die DB zugroß wird.
Danny
Mit freundlichen Grüßen,
Dani

Danny