舉一個例子:
假設一個文件讀取的過程,有數萬人在同時操作,那么極可能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); ?>