1、阻塞模式(如果其它進程已經加鎖文件,當前進程會等其它進程解鎖后繼續執行)
<?php
$handle = fopen('lock.txt', 'r');
//鎖定
if(flock($handle,LOCK_EX)){
//to do something
//解鎖
flock($handle, LOCK_UN);
}
//關閉文件
fclose($handle);
?>
2、非阻塞模式(如果其它進程已經加鎖文件,當前進程會執行else里面的內容,不會等待文件解鎖)
<?php
$handle = fopen('lock.txt', 'r');
if(flock($handle, LOCK_EX | LOCK_NB)){
//do something
}else{
// 提示系統繁忙
}
flock($handle, LOCK_UN);
fcolse($handle);
?>
注:windows不支持LOCK_NB類型鎖定文件,所以,非阻塞模式不能在windows下做驗證(筆者就遇到這個坑,一直不能執行else里面的內容,Linux系統可以執行)
應用場景:當執行一個腳本而阻塞其它腳本時,如:訂單狀態更改處理
