flock() 总是返回 true

flock() always returning true

过去一个小时一直在研究这个问题,并不能真正找出问题所在。

这是我用来调试问题的代码。

Monitor.php

$fp = fopen("lock.txt", "r+");
$var=flock($fp, LOCK_EX | LOCK_NB);
var_dump($var);
$var=flock($fp, LOCK_SH | LOCK_NB);
var_dump($var);
exit;

locker.php

$fp = fopen("lock.txt", "r+");
sleep(60);

为了查看 flock 是否正常工作,我首先 运行 locker.php,这样文件将被锁定 60 秒,然后我尝试 运行 宁 monitor.php 看看能不能拿到锁

我得到 TRUE 排他锁和共享锁。

会有什么问题?

解决方案:假设打开文件会锁定它。储物柜应该发出一个 flock 来锁定文件。

匆忙错过了那个部分。 Deadlines.Deadlines:)

locker.php 未锁定 文件。 fopening 文件不会锁定它。 flock 是一个 合作咨询 锁定系统。各方都需要参与其中,用flock锁and/or查锁。除非 locker.php 明确 flock 未锁定文件。

在PHP(和许多 UNIX 系统)下,flock 建议的, 意味着 所有 进程想要使用该文件必须使用锁定。那些不这样做的人仍然可以对文件做任何他们想做的事情,并且不会阻止其他进程获得锁。

您的 locker 程序应该同时打开 锁定文件,例如:

$fp = fopen("lock.txt", "r+");
$var=flock($fp, LOCK_SH | LOCK_NB);
sleep(60);