PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ein Besucherzähler in php



ContainerDriver
19-05-2003, 11:43
Hallo!

Ich will mir eine eigene Website bauen. Dazu will ich einen (selbstprogrammierten) Besucherzähler.
Ich habe mir folgendes überlegt:
1. Auf dem Server liegt eine Datei "count".
2. Bei jedem Laden der Startseite "index.html" soll das PHP-Skript aufgerufen werden.
3. Dieses Skript öffnet "count" erhöht die darin stehende Zahl und speichert die Datei wieder.

Nun gibt es folgende Probleme:

1. Zwei User greifen gleichzeitig auf die Website zu. Beide holen sich die Datei "count" mit dem Wert "8". Beide würden "9" in der Datei abspeichern, was falsch wäre! Wie verhindert man so etwas?

2. Ein User drückt den reload-Button, die folge wäre ein neuer Benutzer, obwohl es nur ein Reload ist! Wei verhindert man dies?

Ich habe _noch nicht_ in PHP programmiert (oder sagt man geskriptet?;-)), mich interessiert erst mal der theoretische Weg (die Pfingstferien rücken aber näher...).

Über eine Beschreibung würde ich mich sehr freuen!

MFG
Florian

mehlvogel
19-05-2003, 11:50
Prinzipiell ist das ein guter Absatz,m bis auf die geschildertebn Probleme.

1. Das wirklich zwei Leute zur genau gleichen Zeit das script ausführen und dann zur genau gleichen Zeit wieder schreiben, das finde ich, müsste schon extremer Zufall sein. (Zumindest auf einer kaum besuchten webseite)

2. Man speichert die IP und die letzte Zugriffszeit zusätzlich in einer anderen Dateien. Dann kontrolliert man ob diese IP gerade erst dawar (anhand der Zeit) und es wird nicht erhöht. Ansonsten wird die Datei erhöht und der Eintrag aus der Datei mit der IP erneuert / eignetragen.

Und ich programmiere in PHP, auch wenn das irgendwer skripten nen sollte ;)

Gaert
19-05-2003, 15:53
Hallo!

Zu 1. :
Es gibt die PHP Funktion flock() mit der sich Dateien sperren lassen, während man schreibt. Der zweite Prozess muss es dann in einer While Schleife solange versuchen bis die Datei wieder freigegeben wird. Meine Tests haben allerdings gegeben, dass flock() unter bestimmten umständen nicht korrekt arbeitet.
Wenn du ganz auf Nummer sicher gehen willst verwende stattdessen eine Datenbank zum speichern - da werden diese Probleme vom DBMS gehandled.