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