Christian Seiler: flock() LOCK_NB funktioniert nicht mehr?

Beitrag lesen

Hallo Tom,

Dein Beispiel funktioniert, auch wenn Du eher | statt + verwenden solltest.

Vielleicht verwechselst Du einfach nur die Tatsache, dass Du immer ein sleep(15) in Deinem Code hast damit, dass flock() immer wartet.

Ich habe Dir mal Dein Beispiel etwas angepasst, damit es sleep() nur noch ausführt, wenn das Sperren erfolgreich war:

<?php  
  
if (php_sapi_name () == 'cli') {  
  define ('NL', "\n");  
} else {  
  define ('NL', "<br />\n");  
}  
  
error_reporting (E_ALL);  
  
echo "PHP-Version: " . phpversion () . NL;  
  
$filename = 'dummy.txt';  
  
if (!file_exists ($filename)) {  
  touch ($filename);  
}  
  
$fh = fopen ($filename, 'rb');  
$wb = false;  
  
$ok = flock ($fh, LOCK_EX | LOCK_NB, $wb);  
  
echo "Ergebnis des Lockversuchs auf $filename ist " . ($ok ? 'true' : 'false') . NL;  
echo "Wouldblock: " . ($wb ? 'true' : 'false') . NL;  
  
if ($ok) {  
  flush ();  
  sleep (15);  
}  
  
echo NL . 'fertig' . NL;  
  
?>

Viele Grüße,
Christian