Ограничение памяти и очень большой файл XML - PullRequest
3 голосов
/ 07 сентября 2011

Мне нужно проанализировать очень большой XML-файл с размером файла 750Mo!

У меня ограничение meomy на 512M

ini_set('memory_limit', '512M');

У меня нет проблем, чтобы открыть файл под 30Mo,но с 750Mo я получаю фатальную ошибку

Fatal error: Allowed memory size of 1677721600 bytes exhausted (tried to allocate 2988843769 bytes)

Я делаю это для открытия файлов:

$fichier = file_get_contents($inputfileName);
$xmlInput = simplexml_load_string(utf8_encode($fichier));

У вас есть идея открыть этот файл?

Ответы [ 3 ]

6 голосов
/ 07 сентября 2011

Использование расширений на основе DOM займет значительно больше памяти, поскольку необработанный XML таков, что XML будет полностью разобран в древовидную структуру узлов.Взгляните на XMLReader вместо

Расширение XMLReader представляет собой синтаксический анализатор XML Pull.Читатель действует как курсор, идущий вперед по потоку документов и останавливающийся на каждом узле в пути.

и убедитесь, что вы анализируете с LIBXML_PARSEHUGE

Альтернативой будет XMLParser на основе событий

0 голосов
/ 04 октября 2013

Для больших файлов идеально использовать класс XMLReader.Но если понравилось симплекс:

Код: https://github.com/dkrnl/SimpleXMLReader/blob/master/library/SimpleXMLReader.php

Пример использования: http://github.com/dkrnl/SimpleXMLReader/blob/master/examples/example1.php

0 голосов
/ 07 сентября 2011

Требуется SAX или другой анализатор xml на основе событий. Google 'php sax parser'.

...