Arhiva de zile 17 iunie 2008

Evolutia (Linux comercial)

1 commento » Diverse , YouTube 1 Comentariu »

Scanare recursiv un director cu PHP

Nessun commento » Open Source , PHP , Sfaturi şi trucuri No Comments »

Exista scripturi care ar trebui să aveţi mereu la îndemână, pentru că se termină în sus de care aveţi nevoie în momentele cele mai neaşteptate şi ocazii. Această funcţie în PHP, de exemplu, mi-a salvat în multe cazuri o pierdere inutilă de timp care trece ca argument un şir de caractere care este calea completă pentru a scana scan_directory_recursively funcţia returnează o matrice care conţine structura completă a specificat directorul.

Puteţi indica, ca argument de-al doilea, o prelungire sau o porţiune de text, care nu va apărea în mod necesar î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ă o matrice de toate directoarele şi fişierele in / home / Ivan / ora, in timp ce:

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

returnează o matrice de toate directoarele şi fişierele in / home / Ivan / ora, cu excepţia pentru fişierele cu extensia. php!

Acesta nu este al meu face, de ce eu rog pe cei care fac uz în proiectele lor, nu elimina referirile la lixlpixel, site-ul de Internet de la care provin.

Iată funcţia de:


 <? PHP

 / / Funcţii recursive PHP ------------------------- lixlpixel

 / / Scan_directory_recursively (director pentru a scana, filtru)

 / / Se aşteaptă calea directorul si o extensie optionala pentru a filtra

 / / Desigur, PHP trebuie să aibă permisiunea de a citi directorul

 / / Specificaţi tine şi toate fişierele şi folderele din 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 de a filtra rezultatele, scrie:

 / / $ FileSelection scan_directory_recursively = ("director", "extindere");


 scan_directory_recursively funcţia ($ director, $ filtru = FALSE)

 {
    
 / / În cazul în care calea are un slash la sfârşit am scoate aici
    
 în cazul în care (substr ($ director, -1) == "/")
    
 {
        
 $ Director = substr ($ director, 0, -1);
    
 }

    
 / / În cazul în cale nu este valabil sau nu este un director ...
    
 în cazul în care (file_exists ($ director) | |! is_dir ($ director))
    
 {
        
 / / ... 
 vom reveni false şi a ieşi din funcţia de
        
 întoarce FALSE;

    
 / / ... 
 altceva dacă drumul este lizibil
    
 } Elseif (is_readable ($ director))
    
 {
        
 / / Am deschis directorul
        
 $ Directory_list = opendir ($ director);

        
 / / Şi scana prin elementele din interiorul
        
 în timp ce (FALSE! == ($ file = readdir ($ directory_list)))
        
 {
            
 / / Dacă filepointer nu este directorul curent
            
 / / Sau directorul părinte
            
 if ($ file = && "." $ file! = '..')
            
 {
                
 / / Noi construim noua cale de a scana
                
 $ PATH = $ directorul "/" $ file..;

                
 / / În cazul în care calea este lizibil
                
 în cazul în care (is_readable ($ cale))
                
 {
                    
 / / Ne-am împărţit noua cale de directoare
                    
 $ Subdirectoare = explode ('/', $ cale);

                    
 / / În cazul în care noua cale este un director
                    
 în cazul în care (is_dir ($ cale))
                    
 {
                        
 / / Adauga detalii director la lista de fişiere
                        
 $ Directory_tree [] = array (
                            
 'Calea' => $ cale,
                            
 "Nume" => capăt ($ subdirectoare),
                            
 "Fel" => 'director',

                            
 / / Am scana noua cale de apel această funcţie
                            
 "Conţinut" => scan_directory_recursively ($ cale, filtru de $));

                    
 / / În cazul în care noua cale este un fişier
                    
 } Elseif (is_file ($ cale))
                    
 {
                        
 / / Ia extensia de a lua totul după ultimul punct
                        
 Extensia = $ capăt (exploda (, End ($ subdirectoare)) ".");

                        
 / / În cazul în care nu există nici un filtru, în septembrie sau filtrul este stabilit şi meciuri
                        
 dacă ($ filtru === FALSE | | $ filtru == $ extensie)
                        
 {
                            
 / / Adauga detalii fişiere la lista de fişiere
                            
 $ Directory_tree [] = array (
                                
 'Calea' => $ cale,
                                
 "Nume" => capăt ($ subdirectoare),
                                
 "Extindere" => $ extensie,
                                
 'Size' => Marime ($ cale),
                                
 "Fel" => 'file');
                        
 }
                    
 }
                
 }
            
 }
        
 }
        
 / / Închideţi directorul
        
 closedir ($ directory_list); 

        
 / / Return lista de fişiere
        
 a reveni $ directory_tree;

    
 / / În cazul în calea nu poate fi citit ...
    
 Else {}
        
 / / ... 
 ne intoarcem fals
        
 întoarce FALSE;
    
 }

 }

 / / ------------------------------------------------ ------------


 ?>

Pentru confortul dvs., dar, de asemenea, propria mea, am adăuga aici o versiune fără comentarii şi gata pentru download: