Beschreibung
bool
flock ( int fp, int operation [, int &wouldblock])
PHP liefert einen portablen Weg, Dateien in einer "beratenden"
Art und Weise zu verriegeln. D.h. alle zugreifende Programme
müssen die gleiche Art und Weise der Verriegelung benutzen, oder
es funktioniert nicht.
flock() arbeitet mit fp
welcher ein existierender Dateizeiger sein muss. Der Parameter
operation bestimmt die Art der
Verriegelung und kann einen der folgenden Werte annehmen:
Um eine verteilte, nur lesende Verriegelung zu erhalten,
setzten Sie operation auf LOCK_SH (bzw.
1 vor PHP 4.0.1).
Um eine exklusive, nur schreibende Verriegelung zu erhalten,
setzen Sie operation auf LOCK_EX (bzw.
2 vor PHP 4.0.1).
Um eine Verriegelung freizugeben (lesend oder schreibend),
setzten Sie operation auf LOCK_UN (bzw.
3 vor PHP 4.0.1).
Wenn Sie Zugriffe während der Verriegelung durch
flock() erlauben wollen, fügen Sie LOCK_NB
(bzw. 4 vor PHP 4.0.1) zu operation hinzu.
flock() erlaubt es Ihnen ein einfaches
Leser/Schreiber Modell zu erstellen, welches auf fast jeder Plattform
benutzt werden kann (inkl. den meisten UNIX-Derivaten und auch Windows).
Das optionale dritte Argument ist auf TRUE gesetzt, wenn die
Verriegelung sperren sollte (EWOULDBLOCK errno Bedingung).
flock() gibt TRUE bei Erfolg, FALSE wenn ein
Fehler auftrat (z.B. wenn eine Verriegelung nicht erstellt werden
konnte) zurück.
Anmerkung:
Da flock() einen Dateizeiger benötigt, könnten Sie
eine spezielle Sperrdatei benutzen, um den Zugriff auf eine Datei zu
schützen, welche Sie mittels Öffnen im Schreibmodus (mit dem Argument
"w" or "w+" von fopen()) kürzen wollen.
Warnung |
flock() funktioniert nicht auf NFS und verschiedenen
anderen vernetzten Dateisystemen. Für weitere Detail konsultieren Sie
bitte Ihre Betriebssystemdokumentation.
Bei einigen Betriebssystemen ist flock() auf dem
Prozesslevel implementiert. Wenn Sie ein multithreaded Server API wie
ISAPI benutzen können Sie sich nicht auf flock()
verlassen, um Dateien vor anderen PHP-Skripten zu schützen, welche in
parallelen Threads der gleichen Server-Instanz laufen!
flock() wird antiquierten Dateisystemen wie
FAT und dessen Derivate nicht unterstützt, und gibt
deshalb in solchen Umgebungen immer FALSE zurück (Dies ist speziell
bei Windows 98 Benutzern der Fall).
|