【发布时间】:2014-11-13 00:36:52
【问题描述】:
我编写了一个应用程序,它使用 XMLReader 在 PHP 中解析大型 XML 文件。
一般来说,应用程序运行良好,除了,当我尝试读取大于 2gb 的文件时。
(我还没有弄清楚截止点的确切位置;它在 500mb 文件上完美运行,但在我拥有的下一个最大文件 - 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、编码)除了 文件的大小。
虽然文件很大 - 节点都很小,所以我认为任何单个节点都不会导致内存问题。
【问题讨论】:
-
您正在运行 32 位 PHP,这意味着文件指针是 32 位有符号整数,文件大小限制为 2GB。最新的 PHP 5.6.0(64 位)已修复此问题
标签: php xml xml-parsing xmlreader