我有一个要执行的 php 脚本,前提是该脚本的其他实例尚未运行。我有这个代码:
$lockfile = __DIR__.'/lock.file';
if(file_exists($lockfile) == false)
{
echo 'no lockfile. Job will execute.';
$handle = fopen($lockfile, 'x') or die('Cannot open file: '.$lockfile);
$data = 'This is the lockfile';
fwrite($handle, $data);
fclose($lockfile);
createLinks();
unlink($lockfile);
}
else
{
echo 'Lockfile present, job will not execute. Please try again later';
}
但它不能正确检查文件是否存在。如果我用浏览器调用脚本,lock.file 会正确创建(我可以用 ftp 看到它),然后删除。但是,我仍然可以同时多次运行该脚本。如果我自己用 ftp 创建一个 lock.file,它不会执行脚本。我已经搜索了几个小时了,会是什么?也许我很愚蠢,但我认为这应该可行,对吧?
编辑:杰普,羊群做到了。非常感谢!最终代码:
$lockfile = __DIR__.'/lock.file';
$handle = fopen($lockfile, "x");
if(flock($handle, LOCK_EX))
{
echo 'no lockfile. Job will execute.';
$data = 'This is the lockfile';
fwrite($handle, $data);
createLinks();
fclose($lockfile);
unlink($lockfile);
}
else
{
echo 'Lockfile present, job will not execute. Please try again later';
}