模拟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!; 
} 
?>
上一篇:生成缩略图