我有一个使用simple_html_dom的脚本。
foreach ($urls as $url)
{
$html = file_get_html($url);
if($html->innertext!=''){
foreach($html->find('.doc div[style="padding-top:1px;border-bottom:1px solid #eaeaec;padding-bottom:6px;"]') as $b){
$b->style='""';
echo $b;
}
}
$html->clear();
unset($html);
}
运行此脚本时出现以下错误:
致命错误:允许的内存大小为444596224字节(尝试分配1272字节)。
答案 0 :(得分:2)
问:这个脚本严重泄漏内存......完成后 正在运行,它没有正确地从内存中清理dom对象.. 答:由于php5循环引用内存泄漏,创建DOM后 对象,如果调用,你必须调用$ dom-> clear()来释放内存 file_get_dom()多一次。示例:
$html = file_get_html(...); // do something... $html->clear(); unset($html);
从他们的常见问题解答中找到: http://simplehtmldom.sourceforge.net/manual_faq.htm
答案 1 :(得分:0)
如果您仍想解析此文件
您可以将php.ini的memory_limit
设置得更高或使用以下代码。
ini_set('memory_limit', '128M');
或优化您的代码:(当发现时,发布它)
$finder = $html->find('.doc div[style="..."]'); foreach($finder as $index => $b){ /* do something here */ $finder[$index]->clear(); } $html->clear();
也许你可以使用REGEX删除或获得你需要的东西
答案 2 :(得分:0)
修复问题需要替换此功能,
function clear(){
$this->dom = null;
$this->parent = null;
$this->parent = null;
$this->children = null;
}
就此:
function clear(){
unset($this->dom);
unset($this->parent);
unset($this->parent);
unset($this->children);
}