PHP递归刮网页

时间:2014-01-01 11:47:06

标签: php recursion simple-html-dom domparser

我正在尝试以递归方式解析未受保护的Web目录(索引为/),并将其中的所有文件列出到预定义的深度。我已经使用了Simple HTML DOM

下面是目录结构

--index of/
---dir1/
----dir1.1
-----file1
-----file2
----dir1.2
----dir1.3
----dir1.4
---dir2/
---dir3/
---dir4/

显示

    /dir1/dir1.1/file1
    /dir1/dir1.1/file2

但在下一次迭代中,它会显示

    /dir1/dir1.1/dir1.2/

这是代码

<?php
include 'simple_html_dom.php';

$baseurl = 'http://gawisp.com/perry/';

echo 'depth 0'.'</br>';
echo $baseurl.'</br>';

findLinks($baseurl, 1,10);

function findLinks($url, $depth, $maxDepth){
  $html = file_get_html($url);
  foreach($html->find('a') as $element)
    echo '    '.$element->href.'</br>';;

    flush();
    ob_flush();

  if ($depth <= $maxDepth){
    foreach($html->find('a') as $element){
      if(substr($element->href,-1,1) == '/'){
          if($element->href != '../'){
                $url = $url.$element->href;
                echo '</br>depth'.$depth.'</br>';
                echo $url.'</br>';
                flush();
                ob_flush();
                $result = findLinks($url, $depth + 1, $maxDepth);
                echo '.........................  '.$result;
          }
      }
      else{
        echo '----------->'.$url.$element->href.'</br>';
      }
    }
    unset($element);
  }else
    exit;
return 0;
}
?>

请引导我走向正确的方向。

1 个答案:

答案 0 :(得分:0)

尝试更改代码,使得当前文件夹$url不会在循环中更改:

// $url = $url.$element->href;
echo '</br>depth'.$depth.'</br>';
echo $url.$element->href.'</br>';
flush();
ob_flush();
$result = findLinks($url.$element->href, $depth + 1, $maxDepth);
echo '.........................  '.$result;