利用 PHP flock 文件锁处理并发
利用flock()函数对文件进行加锁(排它锁),实现并发按序进行。
flock(file,lock,block)有三个参数。
file | 必需。规定要锁定或释放的已打开的文件。 |
lock | 必需。规定要使用哪种锁定类型。可能的值:
|
block | 可选。若设置为 1,则当进行锁定时阻塞其他进程。 |
阻塞模式(后面的进程会一直等待前面的进程执行完毕)
$file = fopen(__DIR__.'/lock.txt','w+'); //加锁 if(flock($file,LOCK_EX)){ //TODO 执行业务代码 flock($file,LOCK_UN);//解锁 } //关闭文件 fclose($file);
非阻塞模式(只要当前文件有锁存在,那么直接返回)
$file = fopen(__DIR__.'/lock.txt','w+'); //加锁 if(flock($file,LOCK_EX|LOCK_NB)){ //获得锁成功,执行业务代码 flock($file,LOCK_UN);//解锁 }else{ //获得锁失败返回系统繁忙等错误提示 } //关闭文件 fclose($file);