模拟flock实现文件锁定
2018-09-07 13:55
主要提供了一种思路。
$lock0和$lock1就是文件锁定的标识符,当文件被某一用户打开的时候,$lock0和$lock1就会产生,当该文件没打开则不存在。
其实最关键就是有个标识符来表示当前这个文件的状态,$lock0和$lock1就是起这样的作用。
复制代码 代码如下:
<?php
//Lockafile,timingoutifittakestoolong.
functionlock($lock,$tries){
$lock0=.{$lock}0;
$lock1=.{$lock}1;
for($i=0;$i<$tries;$i++){
if(!is_file($lock0)){
touch($lock0);
if(!is_file($lock1)){
touch($lock1);
return1;
}
}
usleep(100);
}
return0;
}
//Unlockafile.
functionunlock($lock){
unlink(.{$lock}1);
unlink(.{$lock}0);
}
//Usageexample.
$filename=somefile;
$data=stuffandthingsn;
$tries=10;
if(lock($filename,$tries)){
$h=fopen($filename,a)ordie();
fwrite($h,$data);
fclose($h);
/**
*另外一个进程写文件,检查是否锁定
*/
if(lock($filename,$tries)){
$h2=fopen($filename,a)ordie();
fwrite($h2,checklock);
fclose($h2);
}else{
//die(Failedtolock$filenameafter.($tries*100).milliseconds!;
}
unlock($filename);
}else{
//die(Failedtolock$filenameafter.($tries*100).milliseconds!;
}
?>
上一篇:生成缩略图