PHP阅读和解析大文件?

夏期劇*_*期劇場 0 php memory file file-get-contents fread

我即将阅读一个200Mb的文本文件,然后在里面编辑一些东西,然后将其保存回来.但我有错误.所以:

  • 应该在php中修改哪些确切的设置?

另外哪种文件读取方法最适合打开和解析Big Sized文件?我的意思是:

  • 畏惧?
  • file_get_contents?

Kuf*_*Kuf 5

我不得不做类似的事情,阅读1GB文件.我想留在PHP中,所以最后我用fread来读取文件的一部分,一点一滴:

while (!feof($source_file)) {
    $buffer = fread($source_file, 1024);  // use a buffer of 1024 bytes
    $buffer = str_replace($old,$new,$buffer);
    fwrite($target_file, $buffer);
}
Run Code Online (Sandbox Code Playgroud)

这样,在任何给定时间,只有一小部分文件保存在内存中.我已经检查了效率并且它很好,整个文件大约半分钟.

一个小注释 - 如果被替换的字符串位于缓冲区的末尾,则可能不会被替换.要确保您已更改所有出现次数,请使用较小的偏移量再次运行脚本:

$buffer = fread($source_file, 512);
fwrite($target_file, $buffer);  
while (!feof($source_file)) {
    $buffer = fread($source_file, 1024);  // use a buffer of 1024 bytes
    $buffer = str_replace($old,$new,$buffer);
    fwrite($target_file, $buffer);
}
Run Code Online (Sandbox Code Playgroud)

  • 再次运行算法不是一个很好的选择,最好知道最大搜索字符串的长度并保留前一个缓冲区的那部分,附加另一个段等. (3认同)
  • 如果您的搜索字符串不止一个char,那将不会一直有效:) (2认同)