Thread [PHP] mehrfaches Schreiben in eine Logdatei bei mehreren gleichzeitigen Zugriffen? (9 answers)
Opened by Gast at 2008-10-28 14:23

murphy
 2008-11-11 15:53
#116194 #116194
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
[quote="Gast+2008-11-11 13:35:14--"]
pq+2008-11-10 10:22:29--
[...]
ok, ich verstehe, aber ich denke mal, da hier im Quellcode
Code: (dl )
1
2
27:         flock($fp, LOCK_UN);
28: fclose($fp);

das Entsperren und das Schliessen des Filehandlers direkt hintereinander geschehen, sollte es -jedenfalls in meinem pers. Fall- keinen großen Unterschied machen.
[...]


Das ist sehr wohl ein großer Unterschied, wenn Deine Ausgabe gepuffert ist (was sie vermutlich auch bei PHP standardmäßig immer ist) und Du vor dem Entsperren der Datei nicht den Puffer leerst.

Es kann dann nämlich folgendes passieren: Prozess 1 öffnet die Datei, sperrt sie, schreibt Daten und entsperrt die Datei – die Daten liegen jetzt aber noch im RAM-Puffer und nicht in der Datei. Nun kommt Prozess 2 öffnet und sperrt die Datei, denn Prozess 1 hat sie ja schon entsperrt, und schreibt Daten hinein. Prozess 2 schreibt aber zufällig eine ganze Menge Daten in die Datei, also wird zwischendurch der Puffer einmal geleert. Zu diesem Zeitpunkt kommt nun zufällig wieder Prozess 1 an die Reihe, schließt die Datei und leert dabei seine Puffer. Danacht schreibt Prozess 2 weitere Daten, entsperrt die Datei, schließt sie und leert dabei seine Puffer. Ergebnis: In der Datei stehen hinterher zunächst Daten von Prozess 2 dann von Prozess 1 und dann wieder von Prozess 2, wobei der Übergang zwischen den Blöcken an völlig sinnlosen Stellen liegen kann. Durch die Sperre wurde also nichts gewonnen.
When C++ is your hammer, every problem looks like your thumb.

View full thread [PHP] mehrfaches Schreiben in eine Logdatei bei mehreren gleichzeitigen Zugriffen?