flock

(PHP 3 >= 3.0.7, PHP 4, PHP 5)

flock -- 輕便的咨詢檔案鎖定

說明

bool flock ( int handle, int operation [, int &wouldblock] )

PHP 支援以咨詢模式(也就是說所有訪問程式必須使用同一模式鎖定, 否則它不會工作)鎖定全部檔案的一種輕便方法。

注: 在 Windows 下 flock() 將會強制執行。

flock() 動作的 handle 必須是一個已經開啟的檔案指標。operation 可以是以下值之一:

  • 要取得共享鎖定(讀取的程式),將 operation 設為 LOCK_SH(PHP 4.0.1 以前的版本設定為 1)。

  • 要取得獨佔鎖定(寫入的程式),將 operation 設為 LOCK_EX(PHP 4.0.1 以前的版本中設定為 2)。

  • 要釋放鎖定(無論共享或獨佔),將 operation 設為 LOCK_UN(PHP 4.0.1 以前的版本中設定為 3)。

  • 若果不希望 flock() 在鎖定時堵塞,則給 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中設定為 4)。

flock() 容許執行一個簡單的可以在任何平台中使用的讀取/寫入模型(內含大部分的 Unix 派生版和甚至是 Windows)。若果鎖定會堵塞的話(EWOULDBLOCK 錯誤碼情況下),可選的第三個參數會被設定為 TRUE。鎖定動作也可以被 fclose() 釋放(代碼執行完畢時也會自動呼叫)。

若果成功則返回 TRUE,失敗則返回 FALSE

例子 1. flock() 例子

<?php

$fp 
fopen("/tmp/lock.txt""w+");

if (
flock($fpLOCK_EX)) { // 進行排它型鎖定
    
fwrite($fp"Write something here\n");
    
flock($fpLOCK_UN); // 釋放鎖定
} else {
    echo 
"Couldn't lock the file !";
}

fclose($fp);

?>

注: 由於 flock() 需要一個檔案指標, 因此可能不得不用一個特殊的鎖定檔案來保護打算通過寫模式開啟的檔案的訪問(在 fopen() 函數中加入 "w" 或 "w+")。

警示

flock() 不能用於 NFS 以及其它一些網路檔案系統。詳細資料檢視自己動作系統的文件。

在部分動作系統中 flock() 以程式級實現。當用一個多執行緒伺服器 API(比如 ISAPI)時,可能不可以依靠 flock() 來保護檔案,因為運行於同一伺服器案例中其它並行執行緒的 PHP 腳本可以對該檔案進行處理。

flock() 不支援舊的檔案系統,如 FAT 以及它的派生系統。因此,此環境下總是返回 FALSE(尤其是對 Windows 98 會員來說)。