Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > PHP не может обработать xml большого размера.


Автор: FlakeMusic 7.3.2009, 23:41
выполняю код
Код

$xmlDoc = new DOMDocument();
$xmlDoc->load("http://site.ru/xml/test.xml");


test.xml весит где-то 125Мб. Так вот при выполнении выдаётся ошибка "php in free(): error: modified (chunk-) pointer" и образуется файл php.core
Памяти выделено 128М. Не могу понять почему такое происходит.

Автор: IZ@TOP 26.3.2009, 23:27
Цитата(FlakeMusic @  8.3.2009,  00:41 Найти цитируемый пост)
test.xml весит где-то 125Мб. Так вот при выполнении выдаётся ошибка "php in free(): error: modified (chunk-) pointer" и образуется файл php.core
Памяти выделено 128М. Не могу понять почему такое происходит. 

Во первых, файло такого размера не рекомендуется ни для DOM'а ни для SimpleXML, ибо оба они раскладывают его в памяти, что несомненно займет не столько, сколько весит сам файл, а несколько больше. И не факт что отработает. Для начала скачайте файл на сервер во временную директорию, затем читайте при помощи http://php.net/xmlreader.

Автор: solenko 27.3.2009, 07:45
IZ@TOP, а можно подробнее про XMLReader? Он нмного экономичнее DOMXml?

FlakeMusic, 128М, как уже говорили выше, не хватит в любом случае т.к. нужна память на сам файл + результаты его разбора что будет в любом случае больше чем сам файл. И с использованием XMLReader эта ситуация не изменится.

Автор: IZ@TOP 27.3.2009, 13:11
Цитата(solenko @  27.3.2009,  08:45 Найти цитируемый пост)
IZ@TOP, а можно подробнее про XMLReader? Он нмного экономичнее DOMXml?

Я вроде ссылку привел.

Цитата(solenko @  27.3.2009,  08:45 Найти цитируемый пост)
И с использованием XMLReader эта ситуация не изменится. 

Боюсь, Вы ошибаетесь.
Цитата

The XMLReader extension is an XML Pull parser. The reader acts as a cursor going forward on the document stream and stopping at each node on the way. 

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

Автор: solenko 27.3.2009, 15:24
Цитата(IZ@TOP @  27.3.2009,  12:11 Найти цитируемый пост)
Боюсь, Вы ошибаетесь.
Цитата

The XMLReader extension is an XML Pull parser. The reader acts as a cursor going forward on the document stream and stopping at each node on the way. 

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

Спасибо. Я эту фразу в мануале не понял.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)