我使用以下代码:
$fp = fopen("lock.txt", "w");
if (flock($fp, LOCK_EX|LOCK_NB)) { // do an exclusive lock
//Do something here.
}else{
echo "Could not lock file!";
}
当我从浏览器运行脚本(它锁定并且我只能运行一次)时,此代码运行正常但是当通过cron作业运行时,甚至没有创建lock.txt文件。我有点难过,因为我认为Cron运行的是运行浏览器版本的同一用户,所以它显然有权限。
其他人有这样的事情吗?
编辑:确定现在已创建文件我已完成目录的特定路径。但是,每次cron启动时都会覆盖该文件,而实际上并没有锁定文件。
答案 0 :(得分:4)
这是正确的方法。
<?php
$tempDir = sys_get_temp_dir() . "/";
$fp = fopen("$tempDirlock.txt", "r+");
if (flock($fp, LOCK_EX | LOCK_NB)) { // do an exclusive lock
// do the work
flock($fp, LOCK_UN); // release the lock
} else {
echo "Couldn't get the lock!";
}
fclose($fp);
?>
答案 1 :(得分:1)
为什么不使用fwrite用time()覆盖锁文件内容,并在脚本完成后清除文件。
您可以检查脚本是否正在运行以及运行时间。