2014-09-18 3 views
1

Я написал приложение, которое анализирует большие XML-файлы в PHP с помощью XMLReader.XMLReader не может открыть большие (> 2gb) XML-файлы

Вообще, приложение отлично работает, КРОМЕ при попытке прочитать файл, что это больше, чем 2gb.

(Я не понял точно, где находится отсечка, он безупречно работает в файле 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! выводится.

Если я попытаюсь с меньшим (500 МБ) файлом - я получаю только вывод Succcess!.

Насколько я могу сказать - нет никакой разницы между большими файлами, которые не могут быть открыты и файлы среднего размера, которые могут быть открыты (например, права доступа, действительный XML, кодирование) КРОМЕ размер файла.

Хотя размер файла большой - узлы все крошечные, поэтому я не думаю, что какой-либо один узел вызовет проблему с памятью.

+2

Вы используете 32-битный PHP, что означает, что filepointer представляет собой 32-разрядное целое число со знаком, что дает ограничение на 2GB для файла. Последняя версия PHP 5.6.0 (64-разрядная) исправила эту проблему. –

ответ

1

У PHP может быть нехватка памяти. Попытайтесь:

ini_set('memory_limit','256M'); 
+1

Это не должно быть проблемой памяти, поскольку XMLReader является анализатором тяги. –

+0

Исключительно анекдотичное исправление. У меня была эта проблема несколько лет назад, это решило ее. Похоже, что у кого-то была такая же проблема: http://stackoverflow.com/questions/5128811/how-to-use-xmlreader-domdocument-with-large-xml-file-and-prevent-500-error Согласен, хотя, там * не должен * быть проблемой памяти. – JakeSteam

Смежные вопросы