Hello,
<?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);?>
Generell ist dazu zu sagen, dass das flock ($input, LOCK_UN) meistens die falsche Wahl ist, sondern stattdessen fclose($input) Verwendung finden müsste. In Mehrnutzerumgebungen muss man Dateien entweder geschlossen halten oder in einem kontrollierten Zustand.
Das Offenhalten ohne auch eine Lockingstufe zu halten ist gefährlich, da Veränderungen ggf. erst mit dem fclose() geschrieben werden. Wenn man das selber auch noch vergisst, dann wirds noch interessanter, insbesondere, wenn man Files in Funktionen oder Schleifen öffnet.
Bevor man also flock($fh, LOCK_UN) benutzt, muss nach einem schreibenden Zugriff auf jeden Fall fflush() verwendet werden. http://de2.php.net/manual/en/function.fflush.php
Das war jetzt sicher nicht die Aufgabenstellung Deines Scriptes, aber bevor sich hier im Archiv halbe Beispiele breit machen, wollte ich es erwähnt haben.
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
Nur selber lernen macht schlau