在读写时锁定文件

时间:2012-11-04 19:00:30

标签: php file fopen

我有一个存储一些价值的文件。用户可以向该文件添加内容,并更新该文件中的计数器。但是如果两个用户打开文件,他们将获得相同的计数器($arr['counter'])。我该怎么办?也许我可以为一个用户锁定文件,并在更新计数器并将一些内容添加回文件后释放锁定?或者PHP已经锁定文件一旦打开,我不需要担心?这是我目前的代码:

    $handle = fopen($file, 'r');
    $contents = fread($handle, filesize($file));
    fclose($handle);       

    $arr = json_decode($contents);

    //Add stuff here to $arr and update counter $arr['counter']++

    $handle = fopen($file, 'w');
    fwrite($handle, json_encode($arr));   
    fclose($handle);      

1 个答案:

答案 0 :(得分:0)

PHP有flock函数,它会在写入文件之前锁定文件,例如

$handle = fopen($file, 'r');
$contents = fread($handle, filesize($file));
fclose($handle);       

$arr = json_decode($contents);

//Add stuff here to $arr and update counter $arr['counter']++

$handle = fopen($file, 'w');
if(flock($handle, LOCK_EX))
{
    fwrite($handle, json_encode($arr));
    flock($handle, LOCK_UN);        
}
else
{
    // couldn't lock the file
}
fclose($handle);