PHP 逐行读取大文件并替换字符串

PHP read a large file line by line and string replace

我想逐行读取一个大文件,执行字符串替换并将更改保存到文件中,IOW 一次重写 1 行。 PHP/ Unix 有什么简单的解决方案吗? 我想到的最简单的方法是将这些行写入一个新文件,然后替换旧文件,但这并不优雅。

在大多数情况下,使用临时文件似乎不是一个糟糕的解决方案。

$f='data.txt';
$fh=fopen($f,'r+');
while (($l=fgets($fh))!==false) file_put_contents('tmp',clean($l),FILE_APPEND);
fclose($f);
unlink($f); 
rename('tmp',$f);

我认为只有 2 个选项

  1. 使用内存

读取、替换然后将替换后的字符串存入内存,完成后覆盖源文件。

  1. 使用 tmp 文件

读取并替换字符串,然后立即将每一行写入 tmp 文件,完成后,用 tmp 文件替换原始文件

#1会更有效,因为IO很昂贵,如果你有大内存或者处理文件不是太大,就用它。

#2 会有点慢,但即使在大文件上也很稳定。

当然,您可以通过将替换字符串 逐行 写入文件(而不仅仅是 逐行 )来组合这两种方式

有我能想到的最简单、最优雅的方法。