Counter mit PHP
PHP hat viele Möglichkeiten, Dateien, sowohl aus der Windows-, als auch aus der Unix-Dateistruktur zu verarbeiten.
Als kleines, einführendes Beispiel wollen wir nun einen simplen Counter betrachten, der auf einer Textdatei basiert. Das ist besonders praktisch, wenn Sie auf ihrem Account keinen Zugang zu einer Datenbank haben oder Sie sich nicht mit Datenbankprogrammierung beschäftigen wollen.
!VORSICHT!:
Dieser Counter ist nicht für stark frequentierte Sites (>2000 Aufrufe/Tag) oder Sites, die zu einer bestimmten Zeit von sehr vielen aufgerufen wird geeignet, da viele gleichzeitige Aufrufe sehr rechenintensiv sind. Sollten sie die Aufrufe einer solchen Site zählen wollen, ist es notwendig auf eine Datenbank gestützte Lösung zurückzugreifen.
Hier das Skript:
- // (1): Die Datei mit den Daten wir
- // geoeffnet, ausgelesen und vorerst wieder
- // geschlossen.
- $filename = „counter.data„;
- $datafile = @fopen($filename,„r„);
- if ($datafile <= 0){
- echo „Datenfile nicht gefunden oder kaputt!„;
- exit;
- }else{
- $content = fgets($datafile,„12„);
- fclose($datafile);
- }
- // (2): Die ausgelesene Zahl wird um 1 er-
- // hoeht und ausgegeben.
- $content++;
- echo $content;
- // (3): Die Datei wird abermals geöffnet
- // und die Daten mit den neuen überschrieben
- $datafile = @fopen($filename,„w„);
- flock($datafile,„2„);
- fputs($datafile,$content );
- flock($datafile,„3„);
- fclose($datafile);
(1) Als erstes wir der Übersichtlichkeit halber der Name (und evt. Pfad, wenn sich die Datei nicht im selben Verzeichnis befindet) in der Variable gespeichert.
TIPP: Denkbar ist hier jede beliebige Textdatei. Unter Windows öffnen sie einfach Notepad, tragen als erstes Zeichen 0 (bzw. die Zahl, mit der der Counter starten soll zu zählen) ein und speichern die Datei dann unter einem beliebigen Namen ab. Auch die Endung ist beliebig wählbar (in unserem Beispiel .data).
Als nächstes wird die Datei geöffnet. Das geschieht dadurch, das die Daten, die die fopen-Funktion zurückgibt einer Variablen zugewiesen werden. Durch diese Variable, sie wird auch Filepointer
genannt wird die Datei angesprochen, bis die Datei wieder geschlossen wird. Die fopen-Funktion wird mit dem Dateinamen und dem Modus, in dem die Datei geöffnet wird, als Parameter aufgerufen.
TIPP: Es gibt folgende Modi, in denen eine Datei geöffnet werden kann:
r – öffnet nur zum Lesen und setzt den Dateizeiger auf den Anfang der Datei
r – öffnet zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei
w – öffnet nur zum Schreiben, setzt den Dateizeiger auf den Anfang und die Länge der bestehenden Datei auf 0 Byte. Wenn die Datei nicht existiert, wird sie angelegt.
w – öffnet zum Lesen und Schreiben, setzt den Dateizeiger auf den Anfang und die Länge der bestehenden Datei auf 0 Byte. Wenn die Datei nicht existiert, wird sie angelegt.
a – öffnet nur zum Schreiben, setzt den Dateizeiger an das Ende der Datei und fügt weitere Zeichen ein.
a – öffnet zum Schreiben und Lesen, setzt den Dateizeiger an das Ende der Datei und fügt weitere Zeichen ein.
Zusätzlich ein „b“ hinzugefügt werden, das die Behandlung von Binärdateien erlaubt.
Das @ vor der Funktion verhindert lediglich die Ausgabe von Fehlern. Danach wird geprüft, ob die Datei nicht vorhanden bzw. ob sie beschädigt ist. Trifft eines der beiden Dinge zu, so wird eine Fehlermeldung ausgegeben und der Skript beendet. Ist die Datei in Ordnung, so wird ihr Inhalt ausgelesen und der Variable $content zugewiesen. Das geschieht mit fgets, das als ersten Parameter den Filepointer und als zweiten die Anzahl der Zeichen, die gelesen werden. Der zweite Parameter ist optional und bedingt in unserem Beispiel, dass nur die ersten 999999999999 Besucher korrekt gezählt werden. Das sollte aber kein Problem darstellen :-). Die Datei wird erstmal wieder geschlossen.
(2) Die ausgelesen Zahl wird mit den beiden Pluszeichen um 1 erhöht und anschließend die Zahl mit echo ausgegeben.
(3) Nun wird die Datei wieder geöffnet, diesmal aber im Modus „w“. Mit der Funktion flock wird verhindert, dass eine andere Instanz des Skripts auf die Datei zugreift, bis sie aktualisiert wurde. Auch hier ist der erste Parameter der Filepointer und der zweite die auszuführende Operation.
TIPP: flock kann vier Operationen ausführen:
1 – für alle lesbar aber nicht veränderbar
2 – für keine andere Instanz lesbar oder änderbar
3 – eine Sperre aufheben
4 – Zugriffe während der Sperre erlauben.
fputs schreibt etwas in eine Datei. Wieder ist der Filepointer der erste Parameter, der zweite ist das, was geschrieben werden soll. In dem Counter ist das der um 1 erhöhte Wert. Die Sperre wird wieder aufgehoben. Und die Datei geschlossen.