2016-08-09 2 views
0

J'ai la fonction suivante:liste récursive tous les fichiers dans le répertoire

function listFiles($dir, $results = array()){  
    $entities = is_dir($dir) ? array_values(array_diff(scandir($dir), array('..', '.'))) : false ; 
    if($entities) 
     foreach($entities as $e) { 
      $path = $dir.'/'.$e; 
      if(is_dir($path)) { 
       listFiles($path, $results); 
      } 
      $results[] = $path; 
     } 
     return $results; 
    } 
print_r(listFiles('/home/apps/public_html/test_folder')); 

Bien que cela fonctionne en quelque sorte le tableau n'a que la première branche du répertoire. Mais si je fais écho du chemin à l'intérieur de foreach, j'obtiens le chemin de tous les fichiers de tous les dossiers et sous-dossiers et ainsi de suite.

Probablement c'est quelque chose de très petit mais je ne peux pas comprendre quoi et je pourrais utiliser de l'aide. Je vous remercie.

+1

Copie possible de [liste PHP tous les fichiers dans le répertoire] (http://stackoverflow.com/questions/3826963/php-list-all-files-in-directory) –

+0

C'est le même titre pour un problème différent, Si vous lisez attentivement la question –

+0

Si vous lisez attentivement la copie fournie - vous y trouverez d'autres questions similaires, mais c'est trop difficile, je comprends. –

Répondre

0

dans votre fonction récursive si un subdir se trouve que vous appelez la fonction elle-même avec le subdir, mais les résultats de il ne sont pas traitées, attribué à aucune variable de sorte qu'ils sont perdus, vous devez pousser à vos résultats comme ceci:

if(is_dir($path)){ 
    $results[] = listFiles($path, $results); 
} 
+0

oui, mais maintenant, il crée des tableaux en double ... –

+0

comment voulez-vous dire? il devrait retourner les sous-répertoires sous forme de tableaux qui créent des tableaux multidimensionnels pour les sous-répertoires pour le résultat final. –