我想将文件读入字符串,修改内容并将处理后的字符串写回文件。 此外,对服务器的另一个请求可能启动得太早,并尝试在第一个文件通过之前编写相同的文件 - 这绝对不会发生(到目前为止我使用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文件,我想解码,插入或编辑某个节点,然后重新编码),但它不是重复的。
答案 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);