bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
在PHP 5.3.2版本之前,鎖會被 fclose() 釋放(在腳本結束後會自動調用),現在需要手動解鎖
1.LOCK_SH 取得共享鎖(讀取的程序)
2.LOCK_EX 取得獨佔鎖(寫入的程序)
3.LOCK_UN 釋放鎖定 (無論共享或獨佔)
4.LOCK_NB 在flock()鎖定時不阻塞) 與LOCK_EX使用時,不阻塞,直接返回
$file = 'test.txt';
$fp = fopen($file, 'w');
if(flock($fp, LOCK_EX)){ // 取得獨佔鎖
fwrite($fp, "Hello World\r\n"); // 寫入數據
sleep(10); // sleep 10秒,文件被鎖定
fwrite($fp, "Hello PHP\r\n"); // 寫入數據
flock($fp, LOCK_UN); // 解鎖
}
fclose($fp);
test2.php:
<?php
$file = 'test.txt';
$fp = fopen($file, 'r');
if(flock($fp, LOCK_SH)){ // 取得貢獻鎖
while(!feof($fp)){
echo fread($fp, 100);
}
flock($fp, LOCK_UN);
}
fclose($fp);
?>
先執行test1.php,10秒內執行執行test2.php;test1.php獨佔,必須等到test1.php執行完後,test2.php才能執行。阻塞