flock()总是返回true

时间:2015-05-07 09:48:59

标签: php flock

过去一小时已经过去了,并且无法弄清楚什么是错的。

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

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的独占锁和共享锁。

会出现什么问题?

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

在匆忙中错过了那一部分。 Deadlines.Deadlines:)

2 个答案:

答案 0 :(得分:3)

locker.php 未锁定该文件。打开文件不会锁定它。 flock合作顾问锁定系统。所有各方都需要参与其中并使用flock来锁定和/或检查锁定。除非locker.php明确flock该文件,否则它不会被锁定。

答案 1 :(得分:1)

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

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

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