首頁 >後端開發 >php教程 >PHP實作檔案鎖定加鎖、解鎖方法

PHP實作檔案鎖定加鎖、解鎖方法

墨辰丷
墨辰丷原創
2018-05-21 09:15:211928瀏覽

這篇文章主要介紹了PHP實現對文件鎖進行加鎖、解鎖操作的方法,結合實例形式分析了PHP針對文件進行加鎖、解鎖操作的功能、實現方法與相關注意事項,需要的朋友可以參考下

在專案中,一般都用到日誌,如資料庫查詢日誌、存取日誌、對外介面請求回傳參數日誌,在處理日誌時簡單的寫法如下

$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  die("The $file is not writable!");
}
fwrite($fp, 'here');
fclose($fp);

但這種寫法是由瑕疵的,一個網站同一時間並不是只有一個用戶訪問的,在多個用戶同時訪問時,就會出現問題,也就是多個行程使用同一個資源時,前一個行程寫到一半後面的行程就開始寫了,因此最後產生的日誌就亂了。這種情況下,就用到鎖了,在檔案加鎖期間,其他進程是不會修改檔案的,只有當檔案解鎖時,才可以操作。寫法如下

$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  exit("The $file is not writable!");
}
flock($fp, LOCK_EX);// 加锁
fwrite($fp, 'here');
flock($fp, LOCK_UN);// 解锁
fclose($fp);

如果想測試下在檔案加鎖期間其他進程操作不了檔案的例子,可以用下面給出的demo

log.php

$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  exit("The $file is not writable!");
}
flock($fp, LOCK_EX);
fwrite($fp, 'here');
sleep(10);
flock($fp, LOCK_UN);
fclose($fp);

test.php

#
$file = 'lock.txt';
$fp = fopen($file, 'a');
fwrite($fp, 'good'); // 在sleep期间写不进去
fclose($fp);
// 或是直接使用下面的这个例子,发现在sleep期间打印是个空值
//var_dump(file_get_contents($file));

測試時,先執行log.php,再執行test.php,會發現在sleep期間,test.php是執行達不到效果的。

相關推薦:

php檔案鎖定解決高並發 

# #PHP檔案鎖定並發操作詳解

實例分析PHP檔案鎖定與進程鎖定

################################################################ #######

以上是PHP實作檔案鎖定加鎖、解鎖方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn