0

锁定了一个文件,并试图测试系统对锁定文件的反应。我希望其他进程等待该进程被释放,直到他们可以require_once再次获得该文件并且不会返回错误。

问题是无论我做什么,我似乎都无法锁定文件并在另一个进程请求文件时进行一些等待,并查看系统对该锁定文件的反应。

我试过
1.sleep()它不起作用,它停止了整个 php 引擎。
2. 我创建了一个批处理文件,它只是暂停,直到您按 Enter 键。并使用exec("cmd.exe /c START c:\\1.bat");

所以预感是所有进程实际上都是一个串行任务队列,所以如果一个因任何原因暂停,其他所有进程也是如此吗?

那么如何测试文件是否被锁定?
但是当然,如​​果我是对的,那么如果其他进程无论如何都无法访问它,那么锁定文件有什么意义呢?

4

2 回答 2

1
$file = fopen('somefile.php', 'r+');

while(!flock($file, LOCK_SH | LOCK_NB)) {
    sleep(1);
}

require 'somefile.php';

由于flock 似乎在php 脚本中不起作用,您需要检查是否存在锁。

于 2012-05-08T08:16:16.340 回答
1

require_oncephp处理。因此,您不能简单地为它获取锁 AFAIK。如果您查看文件锁定,请参阅this
它指出,每当您尝试访问锁定的文件时都应该使用锁。

于 2012-05-08T08:51:41.847 回答