模拟flock实现文件锁定

时间:2021-05-18

主要提供了一种思路。
$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!";
}
?>

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章