file_get_contents и file_put_contents с большими файлами - PullRequest
2 голосов
/ 22 октября 2009

Я пытаюсь получить содержимое файла, заменить некоторые его части с помощью регулярных выражений и 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";
}

этот фрагмент кода отлично работает с небольшими файлами, но когда я пробую исходный файл размером около 60 Мб, он просто продолжает выдавать мне сообщение "Произошла какая-то ошибка".

Любые предложения приветствуются.

Обновление. В логах ошибок нет, ограничение памяти установлено на 1024M

Ответы [ 3 ]

4 голосов
/ 07 июня 2012

У меня были проблемы с макс / лимитом file_put_contents.

Не знаю, каковы могут быть пределы, но использование fwrite решило мои проблемы, и я поставил бутылку.

2 голосов
/ 22 октября 2009

Я почти уверен, что вы достигли какого-то ограничения на регулярные выражения. Черт возьми, некоторое время назад я достиг предела с 1000 символов ... с 60 МБ ввода, держу пари, что вы, вероятно, повсеместно достигнете пределов регулярных выражений также с очень простыми шаблонами. Я постараюсь, по крайней мере, максимально упростить его, сделав его непривлекательным с .*? вместо .*, если это возможно.

Чтобы получить больше информации, просто проверьте возвращаемое значение preg_last_error().

2 голосов
/ 22 октября 2009

Возможно, вам не хватает памяти. Что установлено в memory_limit? (phpinfo () скажет вам). Вы можете увеличить предел памяти, например:

ini_set('memory_limit','128M');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...