研究阻止文件的原理,我无法理解为什么这段代码以这种方式工作:
<?php
$fh = fopen('test.txt', 'c');
$res = flock($fh, LOCK_SH | LOCK_NB, $wb);
echo("res:$res, wb:$wb<br>");
if ($res)
{
flock($fh, LOCK_UN);
$res = flock($fh, LOCK_EX, $wb);
sleep(5);
echo("res2:$res, wb2:$wb");
flock($fh, LOCK_UN);
}
fclose($fh);
?>
此代码应设置5秒的独占锁。每次运行。确实如此。))
但是如果你经常运行它(例如,每秒一次),那么(直到文件被锁定)所有后续运行都将导致 flock()返回&#34; false&#34; 。这也很棒! ...直到你在SINGLE浏览器TAB中测试它
现在尝试在浏览器的不同TABS中运行此脚本!
在几个选项卡中打开脚本并一致地更新它们。这会触发一个模糊的脚本操作。在所有标签中 flock()返回&#34; true&#34; !
但是,如果您更新第一个标签两次,此标签和其他标签将显示预期结果
这并不是所有的陌生!!!
将任何参数添加到每个选项卡的URL(制作不同的URL),例如......?tab = 1 ...?tab = 2等等.Yippe!现在所有标签都正常!
为什么???!!!!我在几个托管上花了几个小时检查这个,但我不明白为什么它这样工作((
问题已经解决。代码很完美。
原因是浏览器没有立即发送请求。
添加
echo(time().'<br>');
在第一行,您将看到脚本开始的那一刻被转移 请参阅PHP flock() non-blocking still block why?
中的相同说明应注意,浏览器资源管理器中不存在此问题