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