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);
过去一个小时一直在研究这个问题,并不能真正找出问题所在。
这是我用来调试问题的代码。
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);