Php 简单HTML DOM内存泄漏
我有一个使用简单html dom的脚本Php 简单HTML DOM内存泄漏,php,simple-html-dom,Php,Simple Html Dom,我有一个使用简单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;"]') a
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字节)
如果仍要分析此文件 您可以将php.ini的
内存限制设置得更高或使用下面的代码
ini_集('memory_limit','128M')代码>
或者优化你的代码:(当发现时,释放它)
$finder=$html->find('.doc div[style=“…”);
foreach($finder作为$index=>$b){
/*在这里做点什么*/
$finder[$index]->clear();
}
$html->clear();
如果仍要解析此文件,可能可以使用REGEX remove或获取所需内容
您可以将php.ini的内存限制设置得更高或使用下面的代码
ini_集('memory_limit','128M')代码>
或者优化你的代码:(当发现时,释放它)
$finder=$html->find('.doc div[style=“…”);
foreach($finder作为$index=>$b){
/*在这里做点什么*/
$finder[$index]->clear();
}
$html->clear();
也许您可以使用REGEX remove或获取所需的来修复需要替换此函数的问题
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);
}
若要修复问题,需要替换此函数
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);
}
问:这个脚本严重泄漏内存。。。完成后
正在运行时,它没有从内存中正确清理dom对象
答:由于php5循环引用内存泄漏,在创建DOM之后
对象,则必须调用$dom->clear()以释放内存
多次使用file_get_dom()
例如:
$html = file_get_html(...);
// do something...
$html->clear();
unset($html);
摘自以下常见问题:
问:这个脚本严重泄漏内存。。。完成后
正在运行时,它没有从内存中正确清理dom对象
答:由于php5循环引用内存泄漏,在创建DOM之后
对象,则必须调用$dom->clear()以释放内存
多次使用file_get_dom()
例如:
$html = file_get_html(...);
// do something...
$html->clear();
unset($html);
摘自以下常见问题:
您正在加载的HTML文件的大小可能太大。大约400 MB,。。无法想象html/dom操作占用了这么多内存。请尝试不同的url,以确认@nickb的假设。一些小页面之后,尝试使用cURL下载页面,然后再使用simple_html_dom输出。。。我个人在file\u get\u html
方面有很多问题,还有很多其他问题(根据谷歌的说法),我想问题出在你的选择器上。尝试做一些更简单的事情,如按类或任何其他属性选择。您正在加载的HTML文件的大小可能太大。这可能是400 MB,。。无法想象html/dom操作占用了这么多内存。请尝试不同的url,以确认@nickb的假设。一些小页面之后,尝试使用cURL下载页面,然后再使用simple_html_dom输出。。。我个人在file\u get\u html
方面有很多问题,还有很多其他问题(根据谷歌的说法),我想问题出在你的选择器上。尝试做一些更简单的事情,比如按类或任何其他属性选择。