DomDocument won't load HTML——"允许的内存大小…exhausted&quo


DomDocument won't load HTML -- "Allowed memory size ... exhausted" error

我正在尝试使用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字符串大小计算,它应该是差不多的。

所以,出于某种原因,它似乎DomDocument试图分配大量的内存,当我没有libxml_use_internal_errors(true),但当我添加那一行它神奇地开始工作。

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