Archives de la journée Juin 17, 2008

Evolution (Linux Commercial)

1 commento » Divers , YouTube 1 Commentaire »

Recherche récursive un répertoire avec PHP

Nessun commento » Open Source , PHP , Trucs et Astuces No Comments »

Il ya des scripts que vous devez toujours avoir sous la main, car il finit que vous avez besoin dans les moments les plus inattendus et les occasions. Cette fonction en PHP, par exemple, dans de nombreux cas a sauvé moi un gaspillage inutile de temps qui passe comme argument une chaîne qui est le chemin complet de la fonction de balayage scan_directory_recursively retourne un tableau contenant la structure complète du répertoire spécifié.

Vous pouvez indiquer, dans le second argument optionnel, une extension ou une portion de texte qui ne sera pas nécessairement apparaître dans le nom du fichier. C'est en fait un filtre pour exclure une certaine catégorie de résultats.

Par exemple:

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

retourne un tableau de tous les répertoires et les fichiers dans / home / ivan / heure, tandis que:

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

retourne un tableau de tous les répertoires et les fichiers dans / home / ivan / heure, sauf pour les fichiers avec l'extension. php!

Ce n'est pas mon fait, pourquoi je demande à ceux qui font usage dans leurs projets de ne pas retirer les références à lixlpixel, le site d'où ils viennent.

Voici la fonction:

 
 <Php

 / / Les fonctions PHP récursive ------------- ------------ lixlpixel

 / / Scan_directory_recursively (répertoire à scanner, filtre)

 / / Attend chemin vers le répertoire et d'une extension optionnelle pour filtrer

 / / Bien sûr, PHP doit avoir les autorisations en lecture au répertoire

 / / Spécifiez que vous et tous les fichiers et dossiers à l'intérieur de ce répertoire

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


 / / Pour utiliser cette fonction pour obtenir tous les fichiers et répertoires dans un tableau, écrire:

 / / $ Filestructure scan_directory_recursively = ('chemin / vers / répertoire');


 / / Pour utiliser cette fonction pour scanner un répertoire et de filtrer les résultats, écrire:

 / / $ Fileselection scan_directory_recursively = ('Répertoire', 'extension');


 $directory , $filter = FALSE ) scan_directory_recursively fonction 

($ directory, $ filter = 
FALSE)

 {
    
 / / Si le chemin est barré à la fin nous l'enlever ici
    
 substr ( $directory ,- 1 ) == '/' ) if 
(substr ($ 
annuaire, - 
1) == 
'/')
    
 {
        
 substr ( $directory , 0 ,- 1 ) ; $ Directory = substr 
($ répertoire, 
0, - 
1);
    
 }

    
 / / Si le chemin n'est pas valide ou non est un annuaire ...
    
 ! file_exists ( $directory ) || ! is_dir ( $directory ) ) if 

(file_exists ($ directory) | |! is_dir 
($ directory))
    
 {
        
 / / ... 
 on retourne faux et quitter la fonction
        
 ; return 
FALSE;

    
 / / ... 
 ailleurs si le chemin est lisible
    
 ( is_readable ( $directory ) ) 
Elseif} (is_readable ($ directory))
    
 {
        
 / / On ouvre le répertoire
        
 opendir ( $directory ) ; $ Directory_list = opendir 
($ dossier);

        
 / / Et de numérisation à travers les articles à l'intérieur
        
 FALSE !== ( $file = readdir ( $directory_list ) ) ) while 

(FALSE! == 
($ file = readdir 
($ directory_list)))
        
 {
            
 / / Si le pointeur de fichier n'est pas le répertoire courant
            
 / / Ou le répertoire parent
            
 $file != '.' && $file != '..' ) if 
($ fichier! = '.' & & $ fichier! 

='..')
            
 {
                
 / / On construit le nouveau chemin pour scanner
                
 $directory . '/' . $file ; $ PATH = $ directory 
'/' $ 
fichier..;

                
 / / Si le chemin est lisible
                
 is_readable ( $path ) ) if 
(is_readable ($ path))
                
 {
                    
 / / Nous avons divisé le nouveau chemin par les annuaires
                    
 explode ( '/' , $path ) ; Les sous-répertoires $ 
= explode 
('/', $ 
path);

                    
 / / Si le nouveau chemin est un répertoire
                    
 is_dir ( $path ) ) if 
(is_dir ($ path))
                    
 {
                        
 / / Ajoutez des détails dans le répertoire de la liste des fichiers
                        
 = array ( $ Directory_tree [] = array (
                            
 $path , 'Path' => $ path,
                            
 end ( $subdirectories ) , 'Nom' => fin 
($ sous-répertoires),
                            
 'directory' , «Kind '=>' répertoire ',

                            
 / / On regarde le nouveau chemin en appelant cette fonction
                            
 scan_directory_recursively ( $path , $filter ) ) ; 'Contenu' => scan_directory_recursively 
($ path, $ filter));

                    
 / / Si le nouveau chemin est de déposer
                    
 ( is_file ( $path ) ) } Elseif 
(is_file ($ path))
                    
 {
                        
 / / Obtenir l'extension du fichier en prenant tout après le dernier point
                        
 end ( explode ( '.' , end ( $subdirectories ) ) ) ; $ Extension = fin (End explosent 

('.', ($ sous-répertoires)));

                        
 / / Si il n'ya pas de jeu de filtres ou le filtre est réglé et allumettes
                        
 $filter === FALSE || $filter == $extension ) if 
($ filtre === FALSE | | $ filtre == $ extension)
                        
 {
                            
 / / Ajouter les fichiers à la liste des fichiers de détails
                            
 = array ( $ Directory_tree [] = array (
                                
 $path , 'Path' => $ path,
                                
 end ( $subdirectories ) , 'Nom' => fin 
($ sous-répertoires),
                                
 $extension , 'Extension' => $ extension,
                                
 filesize ( $path ) , 'Taille' = filesize> 
($ path),
                                
 'file' ) ; «Kind 
'=>' fichier ');
                        
 }
                    
 }
                
 }
            
 }
        
 }
        
 / / Fermer le répertoire
        
 $directory_list ) ; closedir 
($ directory_list); 

        
 Liste des fichiers / / Retour
        
 ; return $ directory_tree;

    
 / / Si le chemin n'est pas lisible ...
    
 { Else {}
        
 / / ... 
 on retourne faux
        
 ; return 
FALSE;    
    
 }

 }

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


 ?> 

Pour votre commodité, mais aussi le mien, j'ajoute ici une version sans les commentaires et prêt pour le téléchargement: