Php flock()总是返回真值

Php flock()总是返回真值,php,flock,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);

这件事已经过去一个小时了,我真的搞不清楚到底出了什么问题

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

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

有什么问题吗

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


匆忙中错过了那部分。截止日期。截止日期:)

locker.php未锁定文件。打开文件不会锁定它
flock
是一种合作咨询锁定系统。所有各方都需要参与,并使用
flock
锁定和/或检查锁定。除非locker.php显式地
flock
s文件,否则它不会被锁定。

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

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

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

哦,我真傻+1,并将被评为最佳答案。