PHP 如何使用檔案鎖_PHP教程

來源:互聯網
上載者:User
//WRITE
$fp = fopen("test.txt", ab); //From the end
flock($fp, LOCK_EX); //lock the file for waiting...
fwrite($fp, Just A Test String.......); //Start writing...
flock($fp, LOCK_UN); //Release write lock
fclose($fp); //Close the file讀操作:

//READ
$fp = fopen("test.txt", r);
flock($fp, LOCK_SH);
//Read from the file.......
flock($fp, LOCK_UN);
fclose($fp);來詳細的看看 PHP 手冊上面關於函數 flock 的介紹吧:

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。

來看看 PHP manual 上面經典的執行個體:

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

if (flock($fp, LOCK_EX)) { // 進行排它型鎖定
fwrite($fp, "Write something here");
flock($fp, LOCK_UN); // 釋放鎖定
} else {
echo "Couldnt lock the file !";
}

fclose($fp);

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

注意:

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

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

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

http://www.bkjia.com/PHPjc/486108.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/486108.htmlTechArticle//WRITE $fp = fopen(test.txt, ab); //From the end flock($fp, LOCK_EX); //lock the file for waiting... fwrite($fp, Just A Test String.......); //Start writing... flock($fp, LOCK_UN)...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.