Hallo,
Beim Einsatz von multithreaded Webservern, wie z.B. den IIS mit ISAPI unter Windows, funktioniert flock() nicht zuverlässig.
Das ist übrigens falsch. Unter Windows funktionieren Locks, die mit LockFileEx() erzeugt wurden, auf Dateideskriptorebene, damit lassen sich problemlos verschiedene Threads gegeneinander abschotten. Selbst wenn ein Webserver nur Multiplexing betreiben würde und die Ausführung zwischen verschiedenen Threads hin- und herschieben würde (gut, das funktioniert mit PHP im Moment grundsätzlich nicht, aber spinnen wir mal den Gedankn weiter), selbst dann würde LockFileEx() unter Windows keine Probleme machen. Und PHP verwendet unter Windows LockFileEx() um flock() zu simulieren.
Ich habe das auch schon selbst getestet, als ich für meinen Artikel zu Dateisperren recherchiert habe.
[Es ist übrigens interessant, dass die Windows-Lösung die sauberste ist: Sie funktioniert auf Dateideskriptorebene und ist damit threadsicher, kann dafür auch nur bestimmte Dateibereiche sperren und funktioniert sogar über das Netzwerk. All diese Eigenschaften zusammen bietet keine der UNIX-Lösungen, nur immer eine Auswahl davon.]
Viele Grüße,
Christian