在无法正常工作的文件路径数组上使用flock()

时间:2012-03-29 14:48:13

标签: php file-locking flock

我有一个锁定某个文件夹中所有文件的函数:

function lockFolder_files($folder='',$task=''){

global $file_array;//I need to use this var outside the function too

$file_array=glob($folder . '*_che.php');//this lists all files ending with "_che.php" in the array from folder1.

//now do a foreach on the array and open the file, and lock it:

foreach($file_array as $path){

$lock=fopen($path,"a+")//open with append mode

if($task=="lock"){
flock($lock,LOCK_EX);
}
elseif($task=="unlock"){
flock($lock,LOCK_UN);
}

}//end of foreach

if(count($file_array)==0){echo"no files were found in the folder"; return false;}

}//end of function

所以我称这个函数为:

lockFolder_files("blah1/blah/myfolder","lock");

//do what i need to do with the array of files locked ($file_array)

lockFolder_files("blah1/blah/myfolder","unlock");//unlock all the files

现在它似乎找到了文件夹中的所有文件,将它们分配给数组,但由于某种原因,它似乎没有锁定文件。在测试之后(使用sleep()并尝试使用其他脚本写入文件)flock()似乎对文件没有任何影响......

为什么会发生这种情况?

由于

1 个答案:

答案 0 :(得分:1)

两件事:

  • 仅当所有软件使用flock()访问权限同步时,才允许使用* nix进行文件锁定。
  • 问题是由PHP垃圾收集引起的。函数返回后,所有文件都关闭,因此所有锁都会自动释放。如果你想要锁定,你必须让它们保持打开状态。