DomDocument不会加载HTML - “允许的内存大小......用尽”错误

时间:2014-05-19 00:03:19

标签: php domdocument

我正在尝试使用DomDocument解析HTML页面,但是当我尝试调用loadHTML()函数时,我收到以下PHP错误:

  

允许的内存大小为134217728字节耗尽(尝试分配   32983304字节)

回复HTML的strlen()会产生357878

如果UTF-8字符是1个字节,则HTML字符串的大小为0.3MB。但是,根据PHP错误,DomDocument尝试分配31.5MB!

以下是我正在做的事情:

$dom = new \DomDocument;
$dom->loadHTML($html);
die;

这是正常的吗?

更新

我发现添加:

libxml_use_internal_errors(true);

使它开始工作!

我不知道这个测试是否准确,但是我尝试将它添加到我的类的构造函数中(它是一个非常轻量级的类,并没有做太多的事情):

$this->startingMemoryUsage = memory_get_usage(true);

然后在$dom->loadHtml()之后:

echo (memory_get_usage(true) - memory_get_usage());

输出结果为:

561360

这是0.5MB - 几乎与我之前的HTML字符串大小计算完全相同。

因此,出于某种原因,当我没有libxml_use_internal_errors(true)时,看起来DomDocument会尝试分配大量内存,但是当我添加该行时,它会神奇地开始工作。

1 个答案:

答案 0 :(得分:0)

如果您使用的是libxml_use_internal_errors(true);,那么这就是内存泄漏的原因,因为错误列表正在增长。