当前位置:  开发笔记 > 编程语言 > 正文

MiniXml(php)无法解析大于100k的文件

如何解决《MiniXml(php)无法解析大于100k的文件》经验,为你挑选了1个好方法。

我正在从Web服务检索XML,然后将其加载到MiniXml(PHP)中.当文件小于100k时,它解析得很好.更大,我收到一个错误:

在非对象上调用成员函数getElement()

当我尝试从根元素中获取第一个元素时,就会发生这种情况.

$parsedDoc = new MiniXMLDoc();
$parsedDoc->fromString($xml);
$root =& $parsedDoc->getElement('my-root-element');
$lists =& $root->getElement($type);

我调用的Web服务允许我指定要调用的顶级元素的数量.大小超过100k的最后一个元素形成良好,完全没有任何问题.我唯一能想到的是尺寸.在这种情况下,尺寸重要吗?

更新:我认为这是一个缓冲区问题,但我不知道哪个缓冲区导致了问题.我确信它不是"Web服务调用",因为我知道它正在检索所有数据.它是PHP缓冲区还是MiniXml缓冲区引起的问题?或者它完全是另一回事?(感谢Dan指出这一点)



1> cletus..:

我遇到了与将HTML转换为PDF时谈到的完全相同的事情.

这个bug描述了这个问题.PHP 5.2.x引入了一个新参数pcre.backtrack_limit,默认值为100,000.基本上,自PHP 5.2以来,任何preg_*函数都会在大于100k的字符串上静默失败.顺便说一句,bug mentioend仍然是开放的.关于这一点没有做任何事情.

限制太低了.如果你有选择将它提升到2,000,000(或任何你需要的).如果这不是一个选项 - 它可能不在共享托管环境中 - 那么你就遇到了问题.

当我找到它时,我真的不敢相信这一个.这种改变不仅打破了大量的模板代码(因为许多线程,错误报告和对上述所有内容的评论都会证明)但是没有引发错误(除非您碰巧看到preg_last_error(),让我们面对它,大多数人别).

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有