我有一个要写入的文件,但我需要先锁定它(使用flock()
),以防止任何其他脚本写入它。所以我有:
$file=fopen($file_p);
if (flock($file, LOCK_EX)) {//lock was successful
fwrite($file,$write_contents);
}
但是我需要检查它是否已经被锁定,以防止其他脚本写入它。
我怎样才能做到这一点?
如文档中所述,用于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
}
您的群呼是检查它是否已被锁定。如果它被锁定,则 if() 语句将失败,因此您可以在其上抛出一个 else 类似的东西:
if (flock($file, LOCK_EX)) {//lock was successful
fwrite($file,$write_contents);
} else {
echo "$file is locked.";
}
我会检查我是否无法获得文件的锁定,如下所示:
if (!flock($file, LOCK_EX)) {
throw new Exception(sprintf('Unable to obtain lock on file: %s', $file));
}
fwrite($file, $write_contents);