2015-08-27 3 views
2

У меня проблема с PHP-функцией xml_parse. Он не работает с огромными файлами - у меня есть xml-файл размером 10 МБ.xml_parse огромный файл PHP

Проблема в том, что у меня есть старая библиотека XML-RPC от Zend, и есть еще одна функция (обработчики элементов и фальцовка фреймов).

$parser_resource = xml_parser_create('utf-8'); 

xml_parser_set_option($parser_resource, XML_OPTION_CASE_FOLDING, true); 
xml_set_element_handler($parser_resource, 'XML_RPC_se', 'XML_RPC_ee'); 
xml_set_character_data_handler($parser_resource, 'XML_RPC_cd'); 
if (!xml_parse($parser_resource, $data, 1)) { 
    // ends here with 10MB file  
} 

На другом месте, я просто использовать siple_load_xml_file с опцией LIBXML_PARSEHUGE, но в данном случае я не знаю, что я могу сделать.

Лучший способ будет, если функция xml_parse будет иметь некоторый параметр для огромных файлов.

Спасибо за ваши советы

Ошибка: Ошибка XML: Нет памяти на линии ... длина

+0

Вы видели потребление памяти во время выполнения команды? Возможно, у вас кончился баран? – cb0

+0

Я попробую ini_set с 256 МБ, но ошибка все еще произошла. Я вижу, что есть один элемент с 8 МБ - если это что-то значит. –

ответ

0

Кусок файла для разбора не может быть огромным.

если вы используете Fread

while ($data = fread($fp, 1024*1024)) {...} 

использовать меньшую длину (в моем случае это должно быть меньше, чем 10 МБ), например, 1MB и поместите функцию xml_parse в цикл while.

Смежные вопросы