本帖最后由 liuser_cn 于 2013-08-12 21:25:48 编辑

解决方案 »

  1.   

    foreach($matches['0'] as $k=>$v){
             $matches[$k]   =   'http://bbs.tianya.cn'.$v;
    }循环中修改数组的意义是什么呢?
    你的递归部分的代码也贴出来
      

  2.   

    1:补全,抓取到的地址没有域名。
    2:递归我那个注释之前是这样写的,
    for($i=0;$i<100;$i++){
      $this->getAllPage($nextPageUrl)
                 }
      

  3.   

    for($i=0;$i<100;$i++){
      $this->getAllPage($nextPageUrl)
    }这么做并不是递归抓取100次。
    而是循环了一百次,每次都在执行一个递归函数,而你的递归函数是没有出口的(没有跳出递归的出口,会导致无限递归),当然会死了。
      

  4.   

    对你的需求,可以这么做:
    public function getAllPage($url,$depth,&$result)
    $depth控制递归的深度,初始为0。 引用型的$result 记录最终的匹配到的结果。递归的跳出部分:
    if($depth == 100){
        return;
    }递归函数的递归部分:
        $nextPageUrl    =   "http://bbs.tianya.cn".$nextPage['1'];
        foreach($matches['0'] as $k=>$v){
            $result[] = 'http://bbs.tianya.cn'.$v;
        }
        getAllPage($nextPageUrl,$depth+1,$result);
    递归函数初始调用:
    $result = array();
    getAllPage($url,0,$result);
      

  5.   

    出口就是判断么?还真不是。你即使去掉循环,只用getAllPage(...)那一部分,也会死的。