Hello Christian,
Dein Beispiel funktioniert, auch wenn Du eher | statt + verwenden solltest.
bei mir leider nicht :-(
Muss wohl an der PHP-Version liegen, aus der die Debain-Leute ihre erzeugt haben.
Vielleicht verwechselst Du einfach nur die Tatsache, dass Du immer ein sleep(15) in Deinem Code hast damit, dass flock() immer wartet.
Ich denke nicht. Dann müsste doch das als zweites aufgerufene Script ein "FALSE" für $ok zurückgeben.
Ich habe Dir mal Dein Beispiel etwas angepasst, damit es sleep() nur noch ausführt, wenn das Sperren erfolgreich war:
Das mit dem NL für cli oder Browser-Ausgabe merke ich mir doch gleich mal :-)
Nur eine kleine Änderung, die mMn die Konformität mit HTML wieder herstellen sollte.
[code lang=php]<?php
if (php_sapi_name () == 'cli') {
define ('NL', "\n");
} else {
define ('NL', "<br />\r\n");
}
[...]
$ok = flock ($fh, LOCK_EX | LOCK_NB, $wb);
das hatte ich vorhin schon angepasst.
Es funktioniert trotzdem nicht mehr und ich finde auch eine ganze Menge Meldungen über Google, wenn ich nach dem LOCK_NB suche, dass Andere das gleiche Problem festgestellt haben.
Das Problem ist: für eine Applikation benötige ich dringend ein funktionierendes flock(). Ich habe es auch erst durch diesen Thread her gemerkt, dass es nicht mehr funktioniert und frage mich jetzt, woran es liegen kann.
Das Script liegt unter http://selfhtml.bitworks.de/artikel_locking/flock_nb.php?showscript
Ohne den Parameter 'showscript' wird es ausgeführt.
Ich bekomme aber in beiden Fällen die folgende Antwort:
Locking Test: 2008-05-29 19:38:45
PHP-Version: 5.2.0-8+etch11
Ergebnis des Lockversuchs auf dummy.txt ist true
Wouldblock: false
fertig
Ein harzliches Glückauf
Tom vom Berg