Hallo,
wollte die Flock-Unterstützung meines Webspaces (bei All-Inkl) mit folgendem Script testen:
<?php
$content = "";
$input = fopen ("lock_test.txt", "a");
if (flock ($input, LOCK_EX | LOCK_NB) == true){
echo "in...<br/>";
for($i=1;$i<10;$i++) {
fwrite($input,"$i\n");
sleep (1);
}
echo "out...<br/>";
flock ($input, LOCK_UN);
}
else echo "can't acquire block...";
fclose ($input);
//sleep () was used to give myself enough time to switch to another browser window,
//invoke the script again to guarantee parallelism and make the notepad test to see
//if an error occurred with other proccess
?>
Der Flock an sich funktioniert bei parallelem Aufruf, d.h. 2 Instanzen kommen sich nicht in die Quere, erst schreibt das eine zuende, dann das zweite. Jedoch wird vom LOCK_NB-Attribut ("non blocking") erwartet, dass ein zweites Skript bei Flock false zurückgibt und somit nicht in einer Warteschleife verharrt.
Auf meinem Server ist php 5.2.5 installiert. Wenn man googlet merkt man, dass es sich wohl um einen Bug in manchen (früheren 5er) php-Versionen handelt.
Weiß hier jemand eine Lösung?
Haben andere all-inkl-Kunden dasselbe Problem?
Danke und Gruß
Herzlicher