在php中读取和覆盖文件内容的最有效方法是什么?

时间:2015-07-20 18:18:05

标签: php fwrite fread flock

我想将文件读入字符串,修改内容并将处理后的字符串写回文件。 此外,对服务器的另一个请求可能启动得太早,并尝试在第一个文件通过之前编写相同的文件 - 这绝对不会发生(到目前为止我使用flock) - 如果脚本阻塞直到锁被释放。

这是某种不完整的方法

$h = fopen($fp, 'a+');
flock($h, LOCK_EX);
$oTxt = '';
while (!feof($file)) {
    $oTxt .= fread($h, 8192);
}
rewind($h);
ftruncate($h, 0)
fwrite($h, );    // process contents and write it back
flock($h, LOCK_UN);
fclose($h);

注意:这个问题与What's the best way to read from and then overwrite file contents in php?非常相似(在我的情况下,它是一个json文件,我想解码,插入或编辑某个节点,然后重新编码),但它不是重复的。

1 个答案:

答案 0 :(得分:2)

您只需拨打一次while即可替换stream_get_contents循环。你应该使用模式r+来读写文件;当您开始时,a+会将流定位在文件的末尾,因此无法阅读任何内容。

$h = fopen($fp, 'r+');
flock($h, LOCK_EX);
$oTxt = stream_get_contents($h);
// Process contents
rewind($h);
ftruncate($h, 0);
fwrite($h, $oTxt); 
flock($h, LOCK_UN);
fclose($h);