函式名:flock()
適用版本:所有版本
用法:flock() 函式用於對檔案進行排它性鎖定,以確保在同一時間只有一個程序可以訪問該檔案。它可以用於防止多個程序同時對同一檔案進行讀寫操作,避免資料衝突。
語法:bool flock ( resource $handle, int $operation [, int &$wouldblock ] )
引數:
- $handle:檔案控制代碼,透過 fopen() 或者其他檔案相關函式獲得。
- $operation:鎖定的操作型別,可以是以下常量之一:
- LOCK_SH:共享鎖定(讀鎖),其他程序可以讀取該檔案,但不能寫入。
- LOCK_EX:獨佔鎖定(寫鎖),其他程序既不能讀取也不能寫入該檔案。
- LOCK_UN:釋放鎖定,解除鎖定狀態。
- &$wouldblock(可選):傳遞一個變數來接收是否會阻塞鎖定操作,預設為 false。如果設定為 true,則表示鎖定操作會因為其他程序已經鎖定了檔案而被阻塞。
返回值:成功時返回 true,失敗時返回 false。
示例:
$filename = 'example.txt';
$handle = fopen($filename, 'r+');
if (flock($handle, LOCK_EX)) {
// 獲得獨佔鎖定,可以對檔案進行寫操作
fwrite($handle, 'Hello, PHP!');
// 解除鎖定
flock($handle, LOCK_UN);
} else {
// 鎖定失敗,處理錯誤邏輯
echo '無法鎖定檔案';
}
fclose($handle);
在上面的示例中,我們開啟了一個檔案並獲取了檔案控制代碼,然後使用 flock() 函式將檔案鎖定為獨佔模式。在鎖定期間,我們可以對檔案進行寫操作。最後,透過呼叫 flock() 函式並傳遞 LOCK_UN 引數來解除鎖定。
請注意,flock() 函式只能用於同一臺伺服器上的程序之間進行檔案鎖定,並且只對在 PHP 指令碼中使用了 flock() 函式進行鎖定的檔案有效。