PHP 如何使用檔案鎖

2022-03-16 06:20:27 字數 1955 閱讀 9237

寫操作:

//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 -- 輕便的諮詢檔案鎖定

其函式原型為:boolflock( 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 上面經典的例項:

<?php

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

if (flock($fp, lock_ex)) else

fclose($fp);

?>

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

注意:

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

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

flock() 不支援舊的檔案系統,如 fat 以及它的派生系統。因此,此環境下總是返回 false(尤其是對 windows 98 使用者來說)。

php如何使用檔案鎖

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...

PHP之檔案鎖

1 4 5 r 唯讀模式開啟 指標指向檔案頭 6 r 讀寫模式開啟 檔案指標指向檔案頭 7 w 置空寫 忽略檔案中的內容,如果檔案不存在則建立 8 w 置空讀寫模式 忽略檔案中的內容,如果檔案不存在則建立 9 a 寫入 將檔案指標指向檔案尾部 如果不存在則建立檔案 10 a 讀寫 將檔案指標指向檔案...

php 定時任務 檔案鎖 PHP檔案鎖併發操作詳解

本文主要和大家分享php檔案鎖併發操作詳解,預設的 php的檔案操作函式,不是阻塞狀態,而是自由操作狀態,希望能幫助到大家。條件 當需要乙個指令碼操作而需要阻塞另外的指令碼操作時,需要用到檔案鎖。鎖操作流程 先加鎖,檢測鎖是否加成功,如果成功再使用!鎖定型別 讀鎖 s lock share lock...