0

我有一个存储一些值的文件。用户可以向该文件添加内容,并且该文件中的计数器会更新。但如果两个用户打开文件,他们将得到相同的计数器 ( $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);      
4

1 回答 1

1

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); 
于 2012-11-04T19:05:00.537 回答