Ich studiere den Flock-Mechanismus in PHP und es fällt mir schwer, die Funktionsweise des LOCK_SH-Modus zu verstehen. Ich lese auf einer Website, dass es die Datei sperrt, so dass andere Skripts nicht schreiben können, aber sie können davon lesen. Doch der folgende Code offenbar nicht wie erwartet funktionieren: In file1.php ich habe:Wie funktioniert LOCK_SH?
$fp = fopen('my_file.txt','r');
flock($fp, LOCK_SH);
sleep(20);
flock($fp, LOCK_UN);
Und in file2.php habe ich
$fp = fopen('my_file.txt','a');
fwrite($fp,'test');
ich das erste Skript ausführen, die die Datei sperrt für 20 Sekunden. Wenn die Sperre gesetzt ist, führe ich file2.php aus, was die Ausführung sofort beendet und nachdem ich 'my_file.txt' geöffnet habe, wurde der String 'test' angehängt (obwohl 'file1.php' immer noch lief). Ich versuche, 'file2.php' so zu ändern, dass es ohne Probleme aus der gesperrten Datei lesen und daraus rot wird. So anscheinend ... die 'LOCK_SH' scheint nichts zu tun. Wenn ich jedoch LOCK_EX ja verwende, sperrt es die Datei, kein Skript kann aus der Datei schreiben oder lesen. Ich verwende Easy PHP und führe es unter Windows 7 aus.
verstehe ich. Ich habe den Mechanismus, den du erklärt hast, getestet und es hat ohne Probleme funktioniert. Du bist der Beste. –