PHPrecursion目录path

我有这个函数返回full directory tree

 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( '&nbsp;', ( $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 

}

但我想要做的是search文件/文件夹,并返回它的path,我该怎么做? 你有这样的function,或者你可以给我一些关于如何做到这一点的提示?

尝试将RecursiveIteratorIterator与RecursiveDirectoryIterator结合使用

 $path = realpath('/path/you/want/to/search/in'); $objects = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); foreach($objects as $name => $object){ if($object->getFilename() === 'work.txt') { echo $object->getPathname(); } } 

补充阅读:

你有这样的function,或者你可以给我一些关于如何做到这一点的提示?

是的,我愿意。

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

我找不到我的post来通知我find了解决scheme。

 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; }