PHP flock LOCK_EX | LOCK_NB竞争条件

时间:2016-03-01 11:35:17

标签: php apache cron

经过多次挖掘后,我无法确定竞争条件背后的问题,我发现了一个PHP伪cron。

代码如下所示:

fh = fopen(ROOT . '.cron.lock', 'w+');
if (flock($fh, LOCK_EX|LOCK_NB)) {
    //Cron logic goes here
    flock($fh, LOCK_UN);
}

它应该非常简单,通常可行。重点是,每隔一段时间,这个小cron执行两次(向用户发送重复的电子邮件),这很烦人。

最初我以为我必须使用第三个$ewouldblock参数。但事实证明这不起作用,只是让cron始终执行而不考虑任何其他过程。

每当我在CLI环境中测试此代码时,它都可以正常工作。但是,一旦我转到在HTTPD(Apache)请求中使用脚本,它就不会。

http://php.net/manual/en/function.flock.php

如果有人可以提供帮助,或者可能给我一个指针,那么整个$ewouldblock参数是什么(因为文档不是很简单)我会非常感激。

0 个答案:

没有答案