Hello,
Ja, die Datei soll auch während einer Nutzung durch einen User bearbeitet werden können.
flock($fh, LOCK_SH); ## Fragen, ob Datei frei ist und gegen
## Veränderung sperrenIn welchem "Zustand" ist eine Datei denn nicht "frei"?
Wenn ein anderer User sie gerade verändert.
Stelle Dir vor, Dein Prozess liest aus der Datei, während ein anderer Prozess gerade Daten darin ändert. Je nach Zugriffsmethode und Inhalt kann das verheerende Folgen für die Datenintegrität haben. Bei HTML-Files kommt dann eben einfach nur Blödsinn heraus, aber wenn es ich um Datenfiles mit verknüpften Daten oder um empfindliche Werte (z.B. Atomkraftwerk) handelt, dürfte sowas keinesfalls passieren.
Bei Webseiten sehe ich nur ernsthafte Probleme, wenn es sich um Shops oder Fernsteuerungen, Zugangsberechtigungen usw. handelt.
flock() ist mir nicht ganz klar,
sprich die Formulierung lesende uns schreibende Verriegelung.
Die Bezeichnung ist auch irreführend, aber schon ewig so gewachsen.
Eigentlich besteht das Locking aus drei Stufen
1. Ungesperrt
2. Gesperrt gegen Erteilung der totalen Sperre (3) an andere Benutzer,
also nur frei zum Lesen und zum Beantragen weiterer Sperren der Stufe 2
durch andere User. Wenn kein _anderer_ Prozess eine Sperre (2) mehr innehat,
darf der eigene auf (3) erhöhen
3. Gesperrt gegen weitere Sperren durch andere Benutzer.
Niemand bekommt eine (2) und schon gar keine (3), solange ein Prozess eine
Sperre der Stufe (3) innehat.
Sperren sollte man immer nur so kurz wie möglich.
Sperren der Stufe (3) sollte man _sofort_ nach erfolgreichem Veränderungsvorgang wieder aufheben.
Beim Schließen einer Datei mit fclose() werden die Sperren. die der Prozesse innehat, automatisch alle wieder aufgehoben
Das Sperren mit flock() ist sogenanntes advisory Locking, wird also parallel zu den Zugriffsmethoden geführt. Wenn ein Prozess sich nicht an den Mechanismus hält, kann er auf die Datei zugreifen, obwohl sie "gesperrt" ist. Beim mandatory Locking ist dieser Mechanismus in die Zugriffsmethoden direkt eingebaut. Wenn man also als ordentlicher Mensch über das Betriebssystem auf die Dateien zugeift, dann kann man auf eine gesperrte Datei _nicht_ zugreifen, egal, ob man sich selber um Sperren kümmert, oder nicht.
Du solltest bei der Erstellung Deines Managementsystems von vorneherein sauber arbeiten, und die Sperrmechanismen verwenden.
Mehr dazu bei Interesse.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
