Php 简单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

我有一个使用简单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字节)


如果仍要分析此文件

您可以将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
方面有很多问题,还有很多其他问题(根据谷歌的说法),我想问题出在你的选择器上。尝试做一些更简单的事情,比如按类或任何其他属性选择。