1

使用 php 库 simple_html_dom 我以 dom 的形式循环遍历 url 列表,对于其中的每一个我尝试找到一个字符串,如果找到它,我将 url 保存在一个数组中,否则我进入下一个循环,返回 urls 数组在最后。该脚本为每个 url 占用大约几秒的时间。在一些循环之后,脚本卡在文件 get html 内的 $dom->load($url) 行并引发分段错误,循环数因不同的 url 列表而异。我试图在测试脚本中隔离 load($url) 处的调用,该脚本仅在循环脚本卡住但测试脚本结束时没有错误的 url 上工作(但我无法检查 dom 的 print_r,因为我的如果我尝试查看页面源代码,Firefox 会崩溃)。我正在使用 LAMP 服务器。这是代码:

error_reporting(E_ALL);
ini_set("max_execution_time", "300");
ini_set("memory_limit", "512M");
ini_set('output_buffering', 0);
ini_set('implicit_flush', 1);
ob_end_flush();
ob_start();
set_time_limit(100);

$urlArray = array();

foreach($urlArray as $url){
    $found = false;
    $dom = file_get_html($url);
    foreach(( $dom->find('target')) as $caught){
        array_push($link, $caught);
        $found = true
    }
    if($trovato){
        return $link;
    }else{
        echo "not found";
    }
}

谢谢任何帮助

4

1 回答 1

6

那么它的常见问题,这里是一个错误http://sourceforge.net/p/simplehtmldom/bugs/103/if在您的声明之前添加以下行:

$dom->clear();
unset($dom);

大多数情况下,在那之后你不会看到任何段错误。但是,如果您解析了数千个 url(比如我 :)),那么您可能会再次遇到它。所以我的解决方案是 - 打开 simple_html_dom.php 文件,并注释 146 到 149 之间的所有行。

 function clear()
 {
   /*
   $this->dom = null;
   $this->nodes = null;
   $this->parent = null;
   $this->children = null;
   */
 }

更新:另外,如果您评论此行 - 您的内存消耗将增加每次解析迭代

于 2013-02-19T20:27:48.247 回答