PHP递归目录路径

8
我有一个函数可以返回完整的目录树:
```

我有这个函数来返回完整的目录树

```
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

但是我想要做的是搜索文件/文件夹并返回它们的路径,我该怎么做?你有这样的功能或者能给我一些如何实现的提示吗?

2个回答

21

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接