F. Zohren: PHP-DummUser-Frage: flock() klappt nicht

Hallo,

bei mir geht das flock nicht.

Folgenden Code schreibe ich in 2 Dateien "test1.php" und "test2.php" :

<?PHP
 $lock = ".lock";

$lock_fp = fopen($lock, "a+");

echo flock($lock_fp, LOCK_EX);
?>

Nachdem ich "test1.php" per Browser aufrufe, meldet dieser als Rückgabewert 1. Korrekt.

Wenn ich jetzt "test2.php" aufrufe müsste er doch eigentlich eine 0, also Misserfolg, melden. Tut er aber nicht.
Auch wenn ich "test1.php" wiederholt aufrufe, klappts nicht.

Ich lasse die Scripte einmal unter meinem W2000-Apache laufen und einmal bei meinem Provider unter Linux-Apache.

Es ist übrigens egal, ob ich LOCK_EX oder LOCK_SH benutze, das Resultat ist das gleiche.

Was mache ich falsch?

Viele Grüsse,
Fabian

  1. Hallo

    bei mir geht das flock nicht.

    Einigen wir uns darauf:
    Ein zweites PHP-Skript auf dem gleichen Server kann auf eine Datei zugreifen,
    die ein erstes PHP-Skript gesperrt hat.

    Folgenden Code schreibe ich in 2 Dateien "test1.php" und "test2.php" :

    ...

    echo flock($lock_fp, LOCK_EX);
    Nachdem ich "test1.php" per Browser aufrufe, meldet dieser als Rückgabewert 1. Korrekt.

    Wenn ich jetzt "test2.php" aufrufe müsste er doch eigentlich eine 0, also Misserfolg, melden. Tut er aber nicht.
    Auch wenn ich "test1.php" wiederholt aufrufe, klappts nicht.

    Das PHP-Manual gibt Dir darüber Aufschluss: Lese bitte insbesondere den zweiten Abschnitt im Kasten, der mit Warnung überschrieben ist http://de2.php.net/manual/de/function.flock.php.

    Es ist übrigens egal, ob ich LOCK_EX oder LOCK_SH benutze, das Resultat ist das gleiche.
    Was mache ich falsch?

    Du hast möglicherweise Erwartungen, die in der Dir vorliegenden Implementierung nicht erfüllt werden. Dieses Verhalten ist jedoch dokumentiert.

    In "Programming PHP" geht Rasmus Lerdorf über die Formulierung des Handbuchs noch hinaus:
    <cite>Because file locking is implemented at the process level on most systems, flock() cannot prevent two PHP scripts running in the same web server process from accessing a file at the same time.</cite>

    Viele Grüsse,
    Fabian

    Freundliche Grüsse,

    Vinzenz