Hello,
Was aber in PHP nicht ganz so einfach ist, oder? Was meinst Du jetzt mit "Update-Prozess"? Doch die "Prozedur" des Aktualisierens selber, oder?
Doch das geht auch mit PHP. Lies Dir nochmal meine Antwort oben durch
Mal angenommen Du wolltest eine Funktion schreiben, die wie ein Counter steigende Nummern zurückgibt, meinetwegen:
$next_id = get_next_id();
Die Id soll wie bei MySQLs Auto-Increment bei jedem Aufruf immer um 1 erhöht werden. Das Script mit der Funktion wird von verschiedenen Apache-Prozessen konkurrierend aufgerufen.
Das geht nur, wenn alle Prozesse dieselben Regeln berücksichtigen, am besten dasselbe "API-Script". Sonst benötigt man mandatory Locking.
Wie würdest Du das jetzt implementieren, das heißt sicherstellen dass es keine doppelten IDs gibt (was ja passiert wenn die Datei mit der aktuellen ID von einem 2. Prozessen zw. fopen() und flock() aufgerufen wird )?
Das habe ich oben schon beschrieben:
Datei öffnen Handle besorgen
Exclusive Lock beantragen
Zähler auslesen
Zähler incrementieren und merken
Zähler zurückschreiben
Datei schließen
Schlüssel zurückliefern
Außer, dass da unerwünschte Dateioperationen (rm, chmod, mv) oder ein Connection Loss stattfinden können, kann nichts schlimmes passieren. Und dass diese Veränderungen nicht stattfinden, dafür muss man sorgen und für den Fall dass doch, immer die Fehler abfragen.
Das Verfahren basiert natürlich auf "Lost Keys". Das bedeutet, dass ungenutzte Schlüssel einfach verloren gehen.
Eine externe Lock-Datei hat IMHO gerade bei besonders vielen Zugriffen den Nachteil, dass es zu einem Dead-Lock kommen kann, falls ein Prozess stirbt...
Wenn ein Prozess stirbt, gibt PHP automatisch die Handles zurück und das OS löst automatisch die Locks wieder auf.
Liebe Grüße aus http://www.braunschweig.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau