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下做验证,Linux系统可以,fclose()文件会自动解锁,当程序执行到解锁文件之前时中断,会成为死锁。
应用场景:当执行一个脚本而阻塞其它脚本时,如:订单状态更改处理