Tom: Datei organisisert sperren

Beitrag lesen

Hello,

Weiterhin ist genau das vermutlich auch der Grund, warum das Freigeben des Locks bei fclose() rausgeflogen ist: Im Prinzip schreibt das Dateischließen alle Puffer auf die Platte. Die PHP-Implementierung hat aber im Prinzip innerhalb der Funktion fclose() einfach nur flock(LOCK_UN) aufgerufen, und erst danach wäre durch Dateischließen das Flush implizit erfolgt. Mithin besteht also die Chance, dass durch diese Race-Condition Dateiinhalt verloren geht.

Das ist mir klar gewesen, nicht aber, dass PHP in der (äußeren)-fclose()-Funktion noch nein flock() eingabut hatte, bevor dann endlich das fclose() des OS aufgerufen wurde...

Welches Windows meinst Du übrigens, dass die Locks erst (sehr viel später?) nach Rückgabe des Dateihandles beseitigen soll?

Insofern sollte man festhalten:

fopen();

flock(LOCK_EX);

fwrite();

fflush();
flock(LOCK_UN);
fclose();

  
Das wäre eine durchaus als sicher vorstellbarere, wenn auch umständliche Vorgehensweise. Da stimme ich Dir zu.  
  
  
  
Liebe Grüße aus dem schönen Oberharz  
  
  
Tom vom Berg  
![](http://selfhtml.bitworks.de/Virencheck.gif)  
  

-- 
 ☻\_  
/▌  
/ \ Nur selber lernen macht schlau  
<http://bergpost.annerschbarrich.de>