我正在尝试使用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会尝试分配大量内存,但是当我添加该行时,它会神奇地开始工作。
答案 0 :(得分:0)
如果您使用的是libxml_use_internal_errors(true);
,那么这就是内存泄漏的原因,因为错误列表正在增长。