Разбор очень больших XML-файлов с помощью PHP - PullRequest
2 голосов
/ 25 сентября 2010

Я работаю над проектом PHP, и мне нужно проанализировать большой XML-файл (> 240 МБ) по URL-адресу. Я использовал xmlReader, он работает в localhost, но не работает на виртуальном хостинге (BlueHost), он показывает ошибку 404! http://webmashing.com/meilleures-des/cronjob?type=sejours

Нужно ли для этого действия выделенный сервер? если да, пожалуйста, дайте мне предложение.

кстати разделение файла XML может помочь?

Ответы [ 3 ]

1 голос
/ 25 сентября 2010

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

Однако вы должны получить сообщение об ошибке или сообщение при запуске сценария на вашем общем хостинге, чтобы определить, в чем проблема. Была ли их версия PHP построена с --enable-libxml, вы получаете ошибку выделения памяти?

0 голосов
/ 25 сентября 2010

Предполагаю, что это проблема, связанная с памятью (установите ограничения памяти и времени выполнения).

За что это стоит. Я использовал vtd-xml (реализация java) для успешного анализа файлов размером более 500 МБ (малый объем памяти и быстрота - возможно, самое быстрое время выполнения).

0 голосов
/ 25 сентября 2010

Вы можете использовать синтаксический анализатор SAX (Simple API for XML), который также является лучшим решением для чтения огромного XML-файла. Как это не будет сбрасывать весь файл в память. Это предотвратит проблему с исчерпанием памяти. Да, это займет время, чтобы прочитать такой огромный файл. Возможно, вам придется проверить, установлены ли на вашем php модули libxml и libxml2 с помощью phpinfo (); функция.

Но лучше, если вы сможете использовать XMLReader, так как это быстрее и экономит ваше использование памяти. Вы можете проверить пиковое использование памяти, используя memory_get_peak_usage (); И читать файл строка за строкой и не задавать строку из массива после выполнения операции над этой конкретной строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...