我有一个我正在写的文件,但我需要先锁定它(使用flock()
),以防止任何其他脚本写入它。
所以我有:
$file=fopen($file_p);
if (flock($file, LOCK_EX)) {//lock was successful
fwrite($file,$write_contents);
}
但是我需要检查它是否已被锁定,以防止其他脚本写入它。
我该怎么做?
答案 0 :(得分:14)
如docs中所述,使用LOCK_NB
进行非阻塞尝试以获取锁定,并在失败时检查$wouldblock
参数以查看其他内容是否存在锁定
if (!flock($fp, LOCK_EX|LOCK_NB, $wouldblock)) {
if ($wouldblock) {
// something already has a lock
}
else {
// couldn't lock for some other reason
}
}
else {
// lock obtained
}
答案 1 :(得分:-1)
你的flock电话是检查它是否已被锁定。如果它被锁定,if()语句将失败,所以你可以用以下内容抛出一个else:
if (flock($file, LOCK_EX)) {//lock was successful
fwrite($file,$write_contents);
} else {
echo "$file is locked.";
}
答案 2 :(得分:-2)
我会查看是否无法锁定文件,如下所示:
if (!flock($file, LOCK_EX)) {
throw new Exception(sprintf('Unable to obtain lock on file: %s', $file));
}
fwrite($file, $write_contents);