Exista scripturi care ar trebui să aibă întotdeauna la îndemână, pentru că în ultimă instanţă, de care ai nevoie la ori şi în cele mai multe ocazii de neconceput. Această funcţie în PHP, de exemplu, a salvat de mine, în multe cazuri, inutilă pierdere de timp care trece ca un argument şir de caractere care este calea completă, pentru a scana scan_directory_recursively funcţie returnează o gamă completă care conţine structura de director.

Puteţi indica, ca cel de-al doilea argument opţional, o extensie sau o porţiune de text care va apărea nu neapărat în numele fişierului. Aceasta este, de fapt, un filtru, pentru a exclude o anumită clasă de rezultate.

De exemplu:

$dirs=scan_directory_recursively('/home/ivan/Tempo');

returnează un array de toate directoarele şi fişierele din / home / Ivan / Timpul în timp ce:

$dirs=scan_directory_recursively('/home/ivan/Tempo','.php');

returnează un array de toate directoarele şi fişierele din / home / Ivan / Ora afara de extensie de fişier. php!

Nu este munca mea, din acest motiv sa intreb pe cei care folosesc in proiectele lor nu elimina trimiterile la lixlpixel, site-ul de internet din care au venit.

Iată de funcţie:

  <? Php 
  / / Recursive lixlpixel ------------ ------------- funcţii PHP 
  / / Scan_directory_recursively (directorul de la scanare, filtru) 
  / / Cale de a se aşteaptă şi un Director de extensie opţional la filtru 
  / / Desigur PHP are să aibă permisiuni de citire pentru directorul 
  / / Puteţi specifica şi toate fişierele şi folderele în interiorul acestui director 
  / / ------------------------------------------------ ------------ 

  / / Pentru a utiliza această funcţie pentru a obţine toate fişierele şi directoarele într-o matrice, scrie: 
  / / $ Filestructure = scan_directory_recursively ( 'calea / catre / directorul'); 

  / / Pentru a utiliza această funcţie pentru a scana un director şi a filtra rezultatele, scrie: 
  / / $ Fileselection = scan_directory_recursively ( "director", "extindere"); 

  $directory , $filter = FALSE ) scan_directory_recursively funcţie (directorul de $, $ filtru = FALSE) 
  ( 
      / / Calea Dacă are un caracter slash de la sfârşitul am elimina-o aici 
      substr ( $directory ,- 1 ) == '/' ) dacă (substr ($ directoare - 1) == '/') 
      ( 
          substr ( $directory , 0 ,- 1 ) ; $ Director = substr ($ director, 0, - 1); 
      ) 

      / / Calea Dacă nu este valabil sau nu este un director ... 
      ! file_exists ( $directory )  || ! is_dir ( $directory ) ) dacă (! file_exists ($ director) | |! is_dir ($ director)) 
      ( 
          / / ...  return false şi vom ieşi din funcţie 
          ; return false; 

      / / ...  altceva în cazul în care este calea de citit 
      ( is_readable ( $directory ) ) ) Elseif (is_readable ($ director)) 
      ( 
          / / Am deschis de directorul de 
          opendir ( $directory ) ; Directory_list $ = opendir ($ director); 

          / / Şi de scanare prin elemente de interior 
          FALSE !== ( $file = readdir ( $directory_list ) ) ) în timp ce (FALSE! == ($ file = readdir ($ directory_list))) 
          ( 
              / / Filepointer În cazul în care nu este în directorul curent 
              / / Sau de directorul părinte 
              $file != '.' && $file != '..' ) dacă ($ file! = '. "& & $ file! ='..') 
              ( 
                  / / Ne construim noi calea de a scana 
                  $directory . '/' . $file ; $ Cale = $ director ". / '. $ File; 

                  / / Dacă este calea de citit 
                  is_readable ( $path ) ) dacă (is_readable ($ cale)) 
                  ( 
                      / / Ne despartim de noua cale de directoare, 
                      explode ( '/' , $path ) ; $ = Subdirectoarele exploda ( '/', $ cale); 

                      / / Dacă este o nouă cale de directorul de 
                      is_dir ( $path ) ) dacă (is_dir ($ cale)) 
                      ( 
                          / / Adăugaţi detalii pentru acest fişier în directorul de listă 
                          = array ( $ Directory_tree [] = array ( 
                              $path , "calea" => $ cale, 
                              end ( $subdirectories ) , 'nume' => sfârşitul ($ subdirectoarele) 
                              'directory' , "fel" => "directorul", 

                              / / Noi scanare noua cale de apel această funcţie 
                               scan_directory_recursively ( $path , $filter ) ) ; "conţinut" => scan_directory_recursively ($ cale, $ filtru)); 

                      / / Dacă este o nouă cale de fişier 
                      ( is_file ( $path ) ) ) Elseif (is_file ($ cale)) 
                      ( 
                          / / Ia extensie de fişier de a lua totul după ultimul punct 
                          end ( explode ( '.' , end ( $subdirectories ) ) ) ; $ Extensie = termina (exploda ( ".", Sfârşitul ($ subdirectoarele))); 

                          / / Dacă nu există nici un filtru sau cu filtru setaţi este stabilit şi se potriveşte 
                          $filter === FALSE  || $filter == $extension ) dacă ($ filtru === FALSE | | == $ $ filtru de prelungire) 
                          ( 
                              / / Adăugaţi fişierul detalii la lista de imagini 
                              = array ( $ Directory_tree [] = array ( 
                                  $path , "calea" => $ cale, 
                                  end ( $subdirectories ) , 'nume' => sfârşitul ($ subdirectoarele) 
                                  $extension , "extindere" => $ extensie, 
                                  filesize ( $path ) , 'size' => filesize ($ cale), 
                                  'file' ) ; 'natură' => 'fisier'); 
                          ) 
                      ) 
                  ) 
              ) 
          ) 
          / / Directorul de Inchide 
          $directory_list ) ; închis ($ directory_list);  

          / / Întoarceţi-vă lista de imagini 
          ; return $ directory_tree; 

      / / Dacă nu este calea de citit ... 
      { Altceva () 
          / / ...  return false am 
          ; return false;     
      ) 
  ) 
  / / ------------------------------------------------ ------------ 

  > 

Pentru uşurinţă, dar de asemenea, aş adăuga aici o versiune fără comentarii şi gata de descărcare:

Ponderea:
  • del.icio.us
  • Google
  • Digg
  • Facebook
  • Technorati
  • YahooMyWeb
  • MySpace