Я пытаюсь прочитать несколько больших текстовых файлов (между 50M-200M), выполняя простую замену текста (по существу, xml, который у меня был, не был должным образом экранирован в некоторых регулярных случаях). Вот упрощенная версия функции:
<?php
function cleanFile($file1, $file2) {
$input_file = fopen($file1, "r");
$output_file = fopen($file2, "w");
while (!feof($input_file)) {
$buffer = trim(fgets($input_file, 4096));
if (substr($buffer,0, 6) == '<text>' AND substr($buffer,0, 15) != '<text><![CDATA[')
{
$buffer = str_replace('<text>', '<text><![CDATA[', $buffer);
$buffer = str_replace('</text>', ']]></text>', $buffer);
}
fputs($output_file, $buffer . "\n");
}
fclose($input_file);
fclose($output_file);
}
?>
Чего я не понимаю, так это того, что для самых больших файлов, около 150 МБ, использование памяти PHP выходит за пределы графика (около 2 ГБ), прежде чем происходит сбой. Я думал, что это самый эффективный способ чтения больших файлов. Есть ли какой-то метод, который мне не хватает, который был бы более эффективным для памяти? Возможно, какая-то настройка, которая хранит вещи в памяти, когда они должны быть собраны?
Другими словами, это не работает, и я не знаю почему, и, насколько я знаю, я не делаю вещи неправильно. Любое направление для меня, чтобы пойти? Спасибо за любой вклад.