PHP flock() 函數 php中的文件鎖定機制


舉一個例子:

假設一個文件讀取的過程,有數萬人在同時操作,那么極可能a用戶剛剛寫入,b用戶也寫入了,兩者以至於混亂,或者在讀取的時候,讀取到別人寫的數據。就好比上公共廁所,去廁所的時候要把門給打開上,上廁所的時候要把門給關上,上完了在打開門的一個過程,倘若不關門就可能導致混亂。

lock正是“鎖”的意思。

語法

flock(file,lock,block)
參數 描述
file 必需。規定要鎖定或釋放的已打開的文件。
lock 必需。規定要使用哪種鎖定類型。
block 可選。若設置為 1 或 true,則當進行鎖定時阻擋其他進程。

說明

flock() 操作的 file 必須是一個已經打開的文件指針。

lock 參數可以是以下值之一:

  • 要取得共享鎖定(讀取的程序),將 lock 設為 LOCK_SH(PHP 4.0.1 以前的版本設置為 1)。
  • 要取得獨占鎖定(寫入的程序),將 lock 設為 LOCK_EX(PHP 4.0.1 以前的版本中設置為 2)。
  • 要釋放鎖定(無論共享或獨占),將 lock 設為 LOCK_UN(PHP 4.0.1 以前的版本中設置為 3)。
  • 如果不希望 flock() 在鎖定時堵塞,則給 lock 加上 LOCK_NB(PHP 4.0.1 以前的版本中設置為 4)。

 案例:

<?php 
$file = "./test1.txt";
$f = fopen($file, 'a');
if(flock($f, LOCK_EX)){#上廁所要上鎖,因為執行的是fwrite(即寫入)所以是LOCK_EX
    fwrite($f, "hello world!");
}
flock($f,LOCK_UN);#要釋放,也就是打開廁所的門。
fclose($f);
 ?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM