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 “Some error ocurred”.
Any suggestions are greatly appreciated.
Update. No errors in the logs, memory limit is set to 1024M
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().