Я написал приложение, которое анализирует большие XML-файлы в PHP с помощью XMLReader.
Как правило, приложение отлично работает, EXCEPT, когда я пытаюсь прочитать файл размером более 2 гб.
(Я не понял точно, где находится отсечка, он работает безупречно в файле 500 Мбайт, но не работает в следующем по величине файле, который у меня есть – 2.5gb).
В частности, если мой код выглядит так:
$reader = new XMLReader(); if ($reader->open("big.xml")) { echo "Success!"; $reader->close(); } else { echo "Failed!"; }
Если я тестирую большой файл (> 2gb), я получаю следующее:
Warning: XMLReader::open() [xmlreader.open]: Unable to open source data in [php script]
И, конечно же, не Failed!
выводится.
Если я попытаюсь с меньшим (500mb) файлом – я получаю только Succcess!
вывод.
Насколько я могу судить, нет никакой разницы между большими файлами, которые невозможно открыть, и средними файлами, которые можно открыть (например, разрешениями, действительным XML, кодировкой). ИСКЛЮЧИТЕ размер файла.
Хотя размер файла большой – узлы все крошечные, поэтому я не думаю, что какой-либо один узел вызовет проблему с памятью.
У PHP может быть нехватка памяти. Пытаться:
ini_set('memory_limit','256M');