PHP Zähler Problem

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Xelos
Mitglied
Beiträge: 19
Registriert: 01.07.2004 15:18

PHP Zähler Problem

Beitrag 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
Elo
Mitglied
Beiträge: 318
Registriert: 04.11.2002 17:44

Beitrag von Elo »

Xelos
Mitglied
Beiträge: 19
Registriert: 01.07.2004 15:18

Beitrag 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
dannyjansen
Mitglied
Beiträge: 129
Registriert: 18.11.2003 18:15
Wohnort: Schnaitsee
Kontaktdaten:

Beitrag 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.
Xelos
Mitglied
Beiträge: 19
Registriert: 01.07.2004 15:18

Beitrag 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
dannyjansen
Mitglied
Beiträge: 129
Registriert: 18.11.2003 18:15
Wohnort: Schnaitsee
Kontaktdaten:

Beitrag 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
Zuletzt geändert von dannyjansen am 07.09.2004 12:29, insgesamt 1-mal geändert.
Benutzeravatar
DaniM
Mitglied
Beiträge: 687
Registriert: 28.04.2003 19:22
Wohnort: Ulm
Kontaktdaten:

Beitrag 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
Ihr wohnt im Süd-Westen Deutschlands?
|- Nehmt an der Schwäbischen phpBB Usergroup teil!
dannyjansen
Mitglied
Beiträge: 129
Registriert: 18.11.2003 18:15
Wohnort: Schnaitsee
Kontaktdaten:

Beitrag 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
Benutzeravatar
DaniM
Mitglied
Beiträge: 687
Registriert: 28.04.2003 19:22
Wohnort: Ulm
Kontaktdaten:

Beitrag 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
Ihr wohnt im Süd-Westen Deutschlands?
|- Nehmt an der Schwäbischen phpBB Usergroup teil!
dannyjansen
Mitglied
Beiträge: 129
Registriert: 18.11.2003 18:15
Wohnort: Schnaitsee
Kontaktdaten:

Beitrag 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
Antworten

Zurück zu „Coding & Technik“