Eine häufige Anwendung in Verbindung mit Dateizugriffen ist die Einbettung eines Counters (Zugriffszählers) in eine Webseite. Ein Counter zählt die Anzahl der Webseiten-Zugriffe. Dabei wird bei jedem Zugriff die Zahl der bisherigen Besucher um eins erhöht. Das heißt, es wird auf eine bestehende Datei zugegriffen und mit ihrem Inhalt gerechnet. Das Ergebnis der Berechnung überschreibt dann den Inhalt der Datei.
Hinweise zum Beispiel:
counter() zur Anzeige der Besucherzahl eingebunden. counter() wird angelegt.$name zugewiesen. Die Variable $count erhält den Ausgangswert 0. $datei. Der Dateizeiger wird mit dem Modus r+ an den Anfang der Datei gesetzt. War der Zugriff auf die Datei nicht erfolgreich, wird das Skript mit einer Meldung verlassen.LOCK_EX) gesperrt. LOCK_EX steht für eine exklusive, nur schreibende Verriegelung einer Datei (vgl. folgenden Abschnitt).fgets() werden die ersten 10 Zeichen der Datei ausgelesen. Der Wert 10 wurde gewählt, da hiermit ein Zählen der Besucherzahl mit 10 Stellen (bis 9999999999) gewährleistet ist. fseek() und der Angabe 0 an den Anfang der Datei gesetzt. fwrite() wird der neue Wert $count in die Datei geschrieben.fclose() schließt die Datei counter.txt und beendet zugleich die Zugriffssperre, die über flock() veranlasst wurde.
Mit dem Befehl flock() können Sie eine Datei in der Zeit, in der das Skript in eine Datei schreibt, zusätzlich für weitere Zugriffe sperren.
Syntax und Bedeutung der flock()-Anweisung
flock (Dateizeiger,Modus);
flock() sperrt den Zugriff auf die Datei, auf die der Parameter Dateizeiger verweist. Der Modus ermöglicht verschiedene Sperrzustände der Datei.LOCK_SH (Shared Lock, Lesezugriff). Soll kein anderer Nutzer zeitgleich die Datei nutzen dürfen, setzen Sie die Option LOCK_EX (Exclusive Lock), flock() wartet, bis die Datei wie angegeben benutzt werden kann. Geben Sie locknb (No Block) an, kehrt die Funktion mit dem Wert FALSE zurück, wenn die Datei bereits von einem anderen Programm gesperrt ist. Möchten Sie die Verriegelung wieder freigeben, geben Sie LOCK_UN (Unlock) an.TRUE zurück bzw. FALSE, wenn ein Fehler auftrat. Ob die Zugriffssicherung funktioniert, erfahren Sie, indem Sie den Rückgabewert überprüfen.fclose() oder am Ende des Skripts automatisch aufgehoben.flock() auf Prozess-Ebene (Teil einer Applikation) implementiert. Hierbei können Sie sich nicht auf flock() verlassen, um Dateien vor dem Zugriff von anderen PHP-Skripten zu schützen. Zudem wird flock() nicht von allen Dateisystemen unterstützt und gibt deshalb in solchen Umgebungen immer FALSE zurück.
Im vorher gezeigten Beispiel ist es notwendig, den Dateizeiger an den Anfang der Datei zu setzen, um den alten Wert des Zählers mit dem neuen Wert überschreiben zu können. Den Dateizeiger können Sie über fseek() positionieren.
fseek (Dateizeiger,Stelle[,Wie]);
[,Wie] legt bestimmte Bezugspunkte für die Ermittlung der Position fest:SEEK_CUR ermöglicht die Verschiebung von der aktuellen Position des Dateizeigers plus Stelle, SEEK_END vom Dateiende und SEEK_SET vom Dateianfang.SEEK_SET gewählt.