Я написал приложение, которое анализирует большие 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, кодирование) КРОМЕ размер файла.
Хотя размер файла большой - узлы все крошечные, поэтому я не думаю, что какой-либо один узел вызовет проблему с памятью.
Вы используете 32-битный PHP, что означает, что filepointer представляет собой 32-разрядное целое число со знаком, что дает ограничение на 2GB для файла. Последняя версия PHP 5.6.0 (64-разрядная) исправила эту проблему. –