Seite 1 von 2

PHP Zähler Problem

Verfasst: 04.09.2004 22:43
von Xelos
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

Verfasst: 05.09.2004 01:26
von Elo

Verfasst: 06.09.2004 06:57
von Xelos
Hier mal der Zähler, wie er im Moment eingebaut ist:

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);
}
Mit flock würde er dann ja so aussehen:

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);
}
- 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

Verfasst: 06.09.2004 15:54
von dannyjansen
Ich habe einen Zähler der mit admin bereich ist fertig, er arbeitet genauso wie deiner, allerdings ohne Fehler. :D Ich kann ihn etwas umbauen dann arbeitet er so wie du ihn brauchst.

Danny

Ps: Weiß aber nicht wie ich den adminbereich in den Adminbereich von phpbb einbaue.

Verfasst: 07.09.2004 09:19
von Xelos
Hallo Dannyjansen,
ich brauche diesen Zähler für eine Weiterverarbeitung.
Mir geht es nicht darum, die Aufrufe der Webseiten darzustellen.
Es geht mir wirklich nur um diese Funktion die ich oben gepostet hatte.

Gruß
Xelos

Verfasst: 07.09.2004 10:34
von dannyjansen
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

Verfasst: 07.09.2004 12:24
von DaniM
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
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.
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

Verfasst: 07.09.2004 12:28
von dannyjansen
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

Verfasst: 07.09.2004 12:45
von DaniM
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
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... ;-)

Mit freundlichen Grüßen,
Dani

Verfasst: 07.09.2004 12:46
von dannyjansen
DaniM hat geschrieben:
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
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... ;-)

Mit freundlichen Grüßen,
Dani
Beides hat vor und nachteile. :wink:

Danny