开发者

file_get_contents and file_put_contents with large files

I'm trying to get file contents, replace some parts of it using regular expressions and preg_replace and save it to another file:

$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";
}

this piece of code works fine with small files, but when I try the original file, which is about 60Mb, it just keeps giving me a message开发者_JAVA百科 "Some error ocurred".

Any suggestions are greatly appreciated.

Update. No errors in the logs, memory limit is set to 1024M


I've had max/limit issues with file_put_contents.

No idea what the limits might be, but using fwrite solved my troubles and I put down the bottle.


You're probably running out of memory. What's the memory_limit set to? (phpinfo() will tell you). You may be able to increase the memory limit like:

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


I'm pretty sure you're hitting some regex limit. Heck, some time ago I hit a limit with 1000 chars... with 60Mb of input I bet you will likely hit regex limits everywhere also with really simple patterns. I will try at least to simplify it as much as possible, making it ungreedy with .*? instead of .* if possible.

To get more information, just check the return value of preg_last_error().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜