开发者

PHP recursive directory path

开发者 https://www.devze.com 2022-12-22 08:57 出处:网络
i have this function to return the full directory tree: function getDirectory( $path = \'.\', $level = 0 ){

i have this function to return the 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( ' ', ( $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 />开发者_JS百科";
            // Just print out the filename

        }

    }

}

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

}

but what i want to do is to search for a file/folder and return it's path, how can i do that? do you have such a function or can you give me some tips on how to do this?


Try to use RecursiveIteratorIterator in combination with 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();
    }
}

Additional reading:

  • http://www.phpro.org/tutorials/Introduction-to-SPL.html


do you have such a function or can you give me some tips on how to do this?

Yes I do.

I actually asked a similar question earlier this morning, but I figure it out. The problem I was having is that the file names . and .. are returned by readdir() and they cause problems when attempting to opendir() with them. When I filtered these out, my recursion worked perfectly. You might want to modify the format in which it outputs the directories that fit the search. Or modify it to output all files and directories. Find an image for "go.jpg" and try it out.

I can't find my post to notify that I found the solution.

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

精彩评论

暂无评论...
验证码 换一张
取 消