经过多次挖掘后,我无法确定竞争条件背后的问题,我发现了一个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
参数是什么(因为文档不是很简单)我会非常感激。