【问题标题】:XMLReader can't open large (>2gb) XML files [duplicate]XMLReader 无法打开大型(>2gb)XML 文件 [重复]
【发布时间】: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


【解决方案1】:

PHP 可能内存不足。试试:

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

【讨论】:

  • 这不应该是内存问题,因为 XMLReader 是一个拉式解析器
  • 纯属轶事修复。几年前我有这个问题,这解决了它。似乎其他人也有同样的问题:stackoverflow.com/questions/5128811/… 不过同意,不应该是内存问题。
猜你喜欢
  • 1970-01-01
  • 2017-04-22
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
相关资源
最近更新 更多