Я собираю этот огромный XML-файл (300 Кбайт ~ 11 МБ) с помощью Simple Html Dom, и у меня возникают проблемы с ограничением памяти. Поэтому я добавил несколько команд php.ini, чтобы переопределить настройки по умолчанию и включить полный контроль над памятью. Плохая идея.
Мой код:
include('simple_html_dom.php');
ini_set('memory_limit', '-1');
ini_set('max_execution_time', '-1');
$xml = file_get_contents('HugeFile.xml');
$xml2 = new simple_html_dom();
$xml2->load($xml);
foreach($xml2->find('tag1') as $element) {
$element->innertext = str_replace('text to replace','new text',$element>innertext);
}
$html->save('output'.xml');
}
Теперь, есть ли способ заставить этот скрипт работать плавно в разумные сроки без каких-либо проблем с памятью?
Это легко сделать с помощью текстового редактора, но мне нужно автоматизировать его, так как у меня есть много файлов для редактирования.
Нашел лучший способ сделать это: нет необходимости в DOM здесь, я просто str_replace
вещи внутри строки, возвращаемой file_get_contents
затем поместите его в другой файл с file_put_contents
, Просто и аккуратно:
$xml = file_get_contents('HugeFile.xml');
$new = str_replace('text to replace','new text',$xml);
file_put_contents('output.xml');
А также preg_replace
может пригодиться для сложных модификаций.
Других решений пока нет …