file_get_contents和file_put_contents包含大文件

时间:2009-10-21 20:06:34

标签: php regex file-io

我正在尝试获取文件内容,使用正则表达式和preg_replace替换它的某些部分并将其保存到另一个文件中:

$content = file_get_contents('file.txt', true);

$content_replaced = preg_replace('/\[\/m\]{1}\s+(\{\{.*\}\})\s+[\x{4e00}-\x{9fa5}]+/u', 'replaced text', $contents);


if ($content_replaced) {
  file_put_contents('file_new.txt', $content_replaced);
  echo "Successful!";
}
else {
  echo "Some error ocurred";
}

这段代码适用于小文件,但是当我尝试原始文件(大约60Mb)时,它只是给我一条消息“发生了一些错误”。

非常感谢任何建议。

更新。日志中没有错误,内存限制设置为1024M

3 个答案:

答案 0 :(得分:4)

file_put_contents我遇到了最大/限制问题。

不知道限制可能是什么,但使用fwrite解决了我的麻烦,我放下瓶子。

答案 1 :(得分:2)

你的内存可能已经不足了。 memory_limit设置为什么? (phpinfo()会告诉你)。您可以增加内存限制,如:

ini_set('memory_limit','128M');

答案 2 :(得分:2)

我很确定你正在达到一些正则表达式限制。哎呀,前段时间我达到了极限with 1000 chars ...有60Mb的输入我敢打赌,你可能会在真正简单的模式下到处达到正则极限。我会尝试至少尽可能地简化它,如果可能的话,不要使用.*?而不是.*

要获取更多信息,只需检查preg_last_error()的返回值。