PHP recursive dizin yolu

2 Cevap php

i full directory tree dönmek için bu işlevi vardır:

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

}

ama ne yapmak istediğim bir dosya / klasör için arama ve yol bulunuyor döndürmek için, ben bunu nasıl yapabilirim? Eğer böyle bir işlevi var mı ya da bana bunu nasıl bazı ipuçları verebilir?

2 Cevap

RecursiveIteratorIterator RecursiveDirectoryIterator ile kombinasyon halinde kullanmak için deneyin

$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();
    }
}

Ek okuma:

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

Yes I do.

Ben aslında daha önce bu sabah benzer bir soru sordu, ama ben bunu anlamaya. Ben olmamdı sorun olduğu dosya adlarıdır. ve .. readdir tarafından döndürülen () ve onlarla () opendir çalışırken onlar sorunlara neden vardır. Ben bu filtre, benim özyineleme mükemmel çalıştı. Bunu aramayı uygun dizinleri çıktılar biçimi değiştirmek isteyebilirsiniz. Veya çıkış için tüm dosyaları ve dizinleri değiştirin. "Go.jpg" için bir resim bulun ve bunu deneyin.

Ben çözüm bulundu bildirmek için benim yazı bulamıyorum.

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