flock()

时间:2017-09-28 22:29:32

标签: php flock

研究阻止文件的原理,我无法理解为什么这段代码以这种方式工作:

<?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?

中的相同说明

应注意,浏览器资源管理器中不存在此问题

0 个答案:

没有答案