2013-06-20 154 views
1

哇,StackOverFlow甚至可以AJAX搜索主題並在我輸入標題時回答問題。真正值得的程序員。目錄的遞歸搜索php

代碼如下。它工作得很好,當我將max遞歸設置爲0.所以看起來很明顯,問題出在我的遞歸代碼中。但我找不到它。

我認爲opendir可能會返回一個全局句柄,我在下一個遞歸中加入它,所以我在opendir句柄之外設置了遞歸。當遞歸的最大值大於零時,不會調用遞歸,並且它仍然不會產生任何內容。我甚至添加了最大打開的目錄。當你看到變量傳遞給遞歸時,如果$ maxopendir爲零,它將不會運行。如果這是問題,我仍然會得到回報。但是我什麼也得不到,除非$ maxrecursions是0,那麼它很好,並返回HOME目錄中與搜索項匹配的所有文件或目錄名稱。

任何可以糾正我的遞歸專家?

$dircontent.= searchalldirectories(HOME, $_POST['search'], 0, 5); 

function searchalldirectories($directory, $seachterm, $maxrecursions, $maxopendir){ 
    $dircontent= ''; 
    $dirs= array(); 
    if ($maxopendir>0){ 
     $maxopendir--; 
     $handle= opendir($directory); 
     while (($dirlisting= readdir($handle))!==false){ 
      $dn= ''; $fn= '  File'; 
      if (is_dir($directory.'/'.$dirlisting) && $maxrecursions>0){ 
       $dirs[count($dirs)]= $directory.'/'.$dirlisting; 
       $dn= '/'; $fn= 'Dir'; 
      }       
      if (stripos($dirlisting, $seachterm)!==false){ 
       $dircontent.= '<input type="image" src="go.jpg" name="cmd" value="home:/'.$dirlisting.'"> '.$fn.':// <b>'.$dirlisting.$dn.'/</b><br>'; 
      } 
     } 
     closedir($handle); 
     for ($i=0; $i<count($dirs); $i++){ 
      $dircontent.= searchalldirectories($dirs[$i], $s, ($maxrecursions-1), $maxopendir); 
     } 
    } 
    return $dircontent; 
} 
+0

我建議你看一下http://stackoverflow.com/questions/2014474/php-read-sub-directories-and-loop-through-files- how-to –

+0

使用'RecursiveDirectoryIterator'和'Cache'來提高性能 – Baba

回答

0

當opendir失敗時,您的循環似乎會自行消失。您可以嘗試測試返回值,像這樣:

if(!($handle= opendir($directory))) { 
     echo "Could not opendir($directory)\n"; 
     return false; 
}