2011-10-19 171 views
0

我一直在使用一個方便的PHP腳本,它掃描我的網站並吐出所有找到的頁面的鏈接。問題是,它也在掃描我的'includes'文件夾,其中包含我所有的.inc.php文件。指示PHP忽略掃描文件夾

顯然,我寧願在掃描網站時忽略此文件夾,但對於我的生活,我無法看到如何編輯腳本來告訴它這樣做。

的腳本是:

<?php 
// starting directory. Dot means current directory 
$basedir = "."; 

// function to count depth of directory 
function getdepth($fn){ 
return (($p = strpos($fn, "/")) === false) ? 0 : (1 + getdepth(substr($fn, $p+1))); 
} 

// function to print a line of html for the indented hyperlink 
function printlink($fn){ 
    $indent = getdepth($fn); // get indent value 
    echo "<li class=\"$indent\"><a href=\"$fn\">"; //print url 
$handle = fopen($fn, "r"); //open web page file 
$filestr = fread($handle, 1024); //read top part of html 
fclose($handle); //clos web page file 
if (preg_match("/<title>.+<\/title>/i",$filestr,$title)) { //get page title 
    echo substr($title[0], 7, strpos($title[0], '/')-8); //print title 
} else { 
    echo "No title"; 
} 
    echo "</a></li><br>\n"; //finish html 
} 

// main function that scans the directory tree for web pages 
function listdir($basedir){ 
if ($handle = @opendir($basedir)) { 
    while (false !== ($fn = readdir($handle))){ 
     if ($fn != '.' && $fn != '..'){ // ignore these 
      $dir = $basedir."/".$fn; 
      if (is_dir($dir)){ 
       listdir($dir); // recursive call to this function 
      } else { //only consider .html etc. files 
       if (preg_match("/[^.\/].+\.(htm|html|php)$/",$dir,$fname)) { 
        printlink($fname[0]); //generate the html code 
       } 
          } 
     } 
    } 
    closedir($handle); 
    } 
} 
// function call 
listdir($basedir); //this line starts the ball rolling 
?> 

現在我能看到腳本被告知忽略某些文件,我嘗試了追加:

&& $dir != 'includes' 

...它在許多地方,但我的PHP知識是太不穩固,不知道如何將該代碼集成到腳本。

如果有人可以幫忙,那麼你會爲我挽救一個非常大的頭痛。乾杯。

+0

你真的應該看看像RecursiveDirectoryIterator這樣的東西,非常清潔http://uk.php.net/manual/en/class.recursivedireiteiterator.php這裏也有幾個更好的選擇(首先需要成員資格)http: //forrst.com/posts/PHP_listing_files_in_a_directory-hvb – robjmills

+0

謝謝你。我的PHP目前非常不穩定,所以我現在只需要一些簡單快捷的方法,但是我一定會調查您添加的鏈接,並希望能夠隨着更多的代碼迭代更好的代碼。雖然我很欣賞這種協助。 – Dave

回答

1

它添加這一行:

if ($fn != '.' && $fn != '..'){ // ignore these 

所以它的

if ($fn != '.' && $fn != '..' && $fn != 'includes'){ // ignore these 
+0

這會阻止您輸出中的任何名爲'includes'的文件夾。如果您使用此解決方案,請記住記錄此行爲。 – FloydThreepwood

+0

這很好,非常感謝。此外,弗洛伊德,也非常感謝您的意見,我希望我能給出兩個答案。 – Dave

1

你的路徑需要是絕對的。將它添加到listdir的頂部

function listdir($basedir){ 
    if($basedir == '/path/to/includes') { 
     return; 
    } [...] 

這也確保只有一個包含文件夾將被忽略。