Загрузить большие XML-файлы в базу данных MySQL (PHP) - PullRequest
2 голосов
/ 31 октября 2009

Для нового проекта мне нужно загрузить большие XML-файлы (200 МБ +) в базу данных MySQL. Мне нужно сопоставить + - 20 каналов (не все поля одинаковы).

Теперь, когда я хочу поймать XML, я получаю эту ошибку:

Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 171296569 bytes) in E:\UsbWebserver\Root\****\application\libraries\MY_xml.php on line 21

Есть ли простое решение для этого? Невозможно получить подачу в частях по несколько МБ каждая.

Большое спасибо!

P.s. У кого-нибудь есть идея, чтобы легко сопоставить xml-каналы?

Ответы [ 5 ]

2 голосов
/ 31 октября 2009

Если вам нужно проанализировать большие XML-файлы (или большие файлы в целом), лучше написать потоковую функцию, чем ту, которая требует, чтобы все было в памяти одновременно. В PHP есть класс XmlReader , который позволяет вам сканировать файл, по одному узлу за раз. Изменение вашего кода для его использования может быть не тривиальным, но вы можете рассмотреть возможность внесения изменений.

1 голос
/ 31 октября 2009

Это должно это исправить:

ini_set('memory_limit', -1);
0 голосов
/ 01 ноября 2009

Является ли PHP единственным языком программирования, который вы бы выбрали для этой работы? Если вы используете Java, есть более эффективные способы загрузки XML.

0 голосов
/ 31 октября 2009

Добавьте ini_set ('memory_limit', '150MB') в ваш скрипт.

...