PHP對檔案進行加鎖、解鎖操作的方法

來源:互聯網
上載者:User
在項目中,一般都用到日誌,如資料庫查詢日誌、訪問日誌、對外介面請求返回參數日誌,本文主要和大家紹了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通過加鎖實現並發搶購功能

實現MySQL語句加鎖的方法

Mysql高並發加鎖交易處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.