【发布时间】:2017-01-03 12:13:52
【问题描述】:
我在flock manual找到了如下描述:
默认情况下,此函数将阻塞,直到请求的锁被 获得
在下面我找到了以下示例代码:
<?php
$fp = fopen("/tmp/lock.txt", "r+");
if (flock($fp, LOCK_EX)) { // acquire an exclusive lock
ftruncate($fp, 0); // truncate file
fwrite($fp, "Write something here\n");
fflush($fp); // flush output before releasing the lock
flock($fp, LOCK_UN); // release the lock
} else {
echo "Couldn't get the lock!";
}
fclose($fp);
?>
但是在任何情况下脚本实际上会返回"Couldn't get the lock!"?我认为它要等到文件lock.txt 被解锁。如果文件永远不会被解锁,那么脚本会一直等待,对吧?
此外,我发现这个答案解释了 unix 上的独占锁和共享锁之间的区别:https://stackoverflow.com/a/11837714/2311074 这4条规则是否也适用于PHP中的flock(例如“如果已经存在一个或多个共享锁,则无法获得排他锁”)?
【问题讨论】:
-
我可以想象在其他情况下该函数可能会返回 FALSE,例如句柄无效或文件系统不支持锁定或类似情况。
-
手册中还提到了一个 LOCK_NB 位掩码值,它使flock 非阻塞。
标签: php