Dennis: Datei richtig gesperrt/PHP verhalten bei flock()

Beitrag lesen

Hi AllesMeins,

flock($fp, LOCK_EX);

An dieser Stelle prüfst du ja gar nicht, ob das Locking erfolgreich war!! Die Funktion flock() versucht normalerweise mehrfach hintereinander die Datei zu sperren, ist dies nicht möglich, so gibt es als Rückgabewert false und das Script arbeitet weiter.

Um genauer kontrollieren zu können, wie flock() arbeitet, solltest du das Non-Blocking aktivieren und flock mehrfach hintereinander bis die Datei gesperrt ist:

$lock = false;  
// Bis zu 5 mal versuchen die Datei zu sperren  
for($i = 0; $i < 5; $i ++) {  
  // LOCK_NB verhindert, dass flock selber es mehrfach versucht  
  $lock = flock($fp, LOCK_EX + LOCK_NB);  
  // Im Erfolgsfall Schleife abbrechen  
  if($lock) break;  
  // Ansonsten 8 Milli-Sekunden warten und erneut probieren  
  [link:http://php.nt/usleep@title=usleep](8000);  
}  
  
// Prüfung von $lock  
if(!$lock) {  
  // Fehlerausgabe, Datei konnte nicht gesperrt werden  
}  
else {  
  // weiter mit der Datei arbeiten  
}

MfG, Dennis.