0
我发现在flock manual下面的描述:有可能flock用LOCK_EX返回false?
默认情况下,该函数将阻塞,直到所请求的锁是 获取
此外下面我发现了以下示例代码:
<?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涌向(例如,“如果已经存在一个或多个共享锁,独占锁不能获得“)?
我能想象,还有其他情况下该功能可能会返回FALSE,例如,如果该句柄无效或者文件系统不支持锁定或类似。 – arkascha