我正在研究 PHP 中的羊群机制,我很难理解 LOCK_SH 模式的功能。我在一个网站上读到它锁定了文件,因此其他脚本无法在其中写入,但他们可以从中读取。但是,以下代码似乎没有按预期工作:在 file1.php 我有:
$fp = fopen('my_file.txt','r');
flock($fp, LOCK_SH);
sleep(20);
flock($fp, LOCK_UN);
在 file2.php 我有
$fp = fopen('my_file.txt','a');
fwrite($fp,'test');
我运行第一个将文件锁定 20 秒的脚本。锁定到位后,我运行 file2.php,它立即完成执行,之后,当我打开“my_file.txt”时,字符串“test”被附加到它上面(尽管“file1.php”仍在运行)。我尝试更改“file2.php”,以便它可以从锁定的文件中读取,并且不会出现任何问题。所以显然......'LOCK_SH'接缝根本什么都不做。但是,如果我使用 LOCK_EX 是的,它会锁定文件,没有脚本可以写入或读取文件。我正在使用 Easy PHP 并在 Windows 7 下运行它。