wjh*_*sch 5 php file-permissions file-exists
我有一个我想要执行的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';
}
Run Code Online (Sandbox Code Playgroud)
但它无法正确检查文件是否存在.如果我用浏览器调用脚本,则会正确创建lock.file(我可以用ftp查看),然后删除.但是,我仍然可以同时多次运行脚本.如果我自己用ftp创建一个lock.file,它就不会执行脚本.我现在一直在寻找几个小时,它能成为什么?也许我很蠢,但我觉得这应该有用,对吧?
编辑:Jep,flock做到了.非常感谢!最终代码:
$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';
}
Run Code Online (Sandbox Code Playgroud)
来自以下文档file_exists:
注意:该函数的结果被缓存。有关更多详细信息,请参阅clearstatcache()。
和:
您还应该注意,PHP 不会缓存有关不存在文件的信息。因此,如果您对不存在的文件调用 file_exists(),它将返回 FALSE,直到您创建该文件。如果您创建了该文件,即使您随后删除了该文件,它也会返回 TRUE。然而 unlink() 会自动清除缓存
尝试将您的功能更改为:
if(file_exists($lockfile) == false)
{
clearstatcache();
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1886 次 |
| 最近记录: |