2010-03-07 204 views
8

我有这个函数返回full directory treePHP递归目录路径

function getDirectory($path = '.', $level = 0){ 

$ignore = array('cgi-bin', '.', '..'); 
// Directories to ignore when listing output. Many hosts 
// will deny PHP access to the cgi-bin. 

$dh = @opendir($path); 
// Open the directory to the handle $dh 

while(false !== ($file = readdir($dh))){ 
// Loop through the directory 

    if(!in_array($file, $ignore)){ 
    // Check that this file is not to be ignored 

     $spaces = str_repeat(' ', ($level * 4)); 
     // Just to add spacing to the list, to better 
     // show the directory tree. 

     if(is_dir("$path/$file")){ 
     // Its a directory, so we need to keep reading down... 

      echo "<strong>$spaces $file</strong><br />"; 
      getDirectory("$path/$file", ($level+1)); 
      // Re-call this same function but on a new directory. 
      // this is what makes function recursive. 

     } else { 

      echo "$spaces $file<br />"; 
      // Just print out the filename 

     } 

    } 

} 

closedir($dh); 
// Close the directory handle 

}

,但我想要做的就是寻找一个文件/文件夹,并返回它的路径,我怎么能去做?你有这样的功能,或者你能给我一些关于如何做到这一点的提示吗?

回答

0

你有这样的功能,或者你可以给我一些提示关于如何做 这个?

是的。

今天早上我其实问了一个类似的问题,但我知道了。我遇到的问题是文件名。和..是由readdir()返回的,它们在尝试使用opendir()时会导致问题。当我将这些过滤掉时,我的递归完美运作。您可能需要修改其输出适合搜索的目录的格式。或者修改它以输出所有文件和目录。找到“go.jpg”的图片并尝试一下。

我找不到我的帖子来通知我找到了解决方案。

define ('HOME', $_SERVER['DOCUMENT_ROOT']); 

    function searchalldirectories($directory, $seachterm, $maxrecursions, $maxopendir){ 
     $dircontent= ''; 
     $dirs= array(); 
     if ($maxopendir > 0){ 
      $maxopendir--; 
      $handle= opendir(HOME.'/'.$directory); 
      while (($dirlisting= readdir($handle)) !== false){ 
       $dn= ''; $fn= '&nbsp;&nbsp;File'; 
       if (is_dir(HOME.'/'.$directory.'/'.$dirlisting) && $maxrecursions>0 && strpos($dirlisting, '.')!==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:/'.$directory.'/'.$dirlisting.'"> '.$fn.':// <b>'.$directory.'/'.$dirlisting.$dn.'/</b><br>'; 
       } 
      } 
      closedir($handle); 
      for ($i=0; $i<count($dirs); $i++){ 
       $dircontent.= searchalldirectories($dirs[$i], $seachterm, ($maxrecursions-1), $maxopendir); 
      } 
     } 
     return $dircontent; 
    }