加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP Native DOMDocument和Simple DOM Parser – 是否有大小限制

发布时间:2020-12-13 22:10:41 所属栏目:PHP教程 来源:网络整理
导读:我需要解析 HTML文档的内容(由Microsoft Word生成).遍历DOM以获取我需要的信息/内容,然后输出所需的CSV.我知道,几乎没有脑部手术. 现在因为PHP不是我的事情而且我有一个紧张的时间表我将使用http://simplehtmldom.sourceforge.net/的PHP Simple HTML DOM Par
我需要解析 HTML文档的内容(由Microsoft Word生成).遍历DOM以获取我需要的信息/内容,然后输出所需的CSV.我知道,几乎没有脑部手术.

现在因为PHP不是我的事情而且我有一个紧张的时间表我将使用http://simplehtmldom.sourceforge.net/的PHP Simple HTML DOM Parser

我注意到我的脚本无效.经过反复试验,我意识到这是由于Word生成的HTML文件的文件大小(它们是3MB,并且有多达30,000行HTML!).我假设有一个文件大小限制,可以使用PHP Simple HTML DOM Parser和本机PHP DOMDocument API解析什么?如果是这种情况有人知道这个限制是什么?我现在谷歌搜索40分钟没有成功.

也许我应该只使用Node.js?

解决方法

PHP“Native” DOMDocumentDocs及其小妹妹 SimpleXMLElementDocs没有硬化的大小限制,但它们受到允许PHP使用的内存的限制(见 PHP memory limitDocs).

此外,您不能假设加载100 MB XML或HTML文件将消耗相同大小的内存.它通常比文件大小更少的内存(例如,五分之一或十分之一或甚至,取决于XML,所以你不能只在这里说因子X而是你需要衡量自己的内容,如果你想获得精确的信息).

你在问题中给出的文件大小–3 MB – 我说的相当小.对于互联网上的HTML文件来说可能不小,但对于基于libxml的PHP扩展来说可能很小.使用memory_get_usage()Docs加载该文件时,可以了解PHP中的内存使用情况.

如果你有非常大的XML文件 – 那么通常是X(HT)ML – 比方说1.5千兆字节 – 使用DOMDocument进行解析会花费很多时间.然后使用XMLReaderDocs将允许您解析文档而不将其加载到内存中(完全).但它不是银弹,因为你仍然有解析时间,但你可以更好地控制要解析的内容和要跳过的部分,这样你就有更多的空间来控制PHP用户空间的优化.

PHP库PHP Simple HTML DOM ParserDocs也没有强加特定的大小限制.但它不是PHP的二进制扩展,而是PHP用户空间.因此,您需要更好地了解该库的确切功能(参见simple_html_dom.php in HEAD revision).如果你查看代码,你会发现它是一个纯粹用PHP编写的解析器.这是因为它是为PHP 4编写的,其中DOMDocument :: loadHTML的DOMDocument尚不存在.

可以想象,PHP扩展可以比用PHP代码编写的PHP库更好地管理内存.特别是当涉及HTML Document对象模型的树结构时(这句话本身并不属实,但是开发这种优化的内存需要大量的工作和良好的设计,并不总是易于创建和维护).

但是:多年以来,没有必要再使用该库了.许多PHP用户不知道这一点,并且他们使用曾经流行的库找到过时的代码示例. PHP Simple Simple DOM Parser库甚至还在Stackoverflow上不时得到建议.

因此,我可以给出的最佳建议是:除非您不需要编写PHP 4兼容代码,否则根本不要使用该库,也不要关心它的限制.而是将代码移植到DOMDocument::loadHTML()Docs.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读