nombre de fichier d'un répertoire et de ses sous répertoires

Mammouth du PHP | 702 Messages

16 mai 2012, 09:21

Bonjour à tous, j'essaie de compter le nombre de fichiers d'un répertoires et de ses sous répertoires,
en ce sens j'ai le code qui suit:
<?

    function count_files($dir)

    {

    		$num = 0;

 
    		$dir_handle = opendir($dir);

   			while($entry = readdir($dir_handle))

		    		if(is_file($dir.'/'.$entry))

   							$num++;

    		closedir($dir_handle);

 
    		return $num;

    } 

?>
le soucis avec ce code c'est qu'il compte que les fichiers d'un répertoires dont le nom est connu,
et non pas de ses sous répertoires,

en fait mes utilisateurs auront u_n accès et pourront créer autant de sous répertoires qu'ils le voudront,

seul le nom du répertoire principal sera connu, il sera une variable récupéré via la méthode GET.

quelqu'un aurait il une idée?

d'avance merci.

ViPHP
ViPHP | 2577 Messages

16 mai 2012, 09:55

<?PHP   
function count_files($dir)
    {
                $num = 0;
                $dir_handle = opendir($dir);
                        while($entry = readdir($dir_handle))
                        { 
                                if(is_file($dir.'/'.$entry))
                                { 
                                                        $num++;
                                } 
                                else
                                {
                                     if ($entry <> '.' and  $entry <> '..') $num +=  count_files($dir.'/'.$entry );
                                } 
                      }
                closedir($dir_handle);
                return $num;
    } 
?>

Mammouth du PHP | 702 Messages

16 mai 2012, 10:30

merci beaucoup j'avais tenté ainsi:
<?php
function count_files($dir) {
   $num = 0;
   $dir_handle = opendir($dir);
   while($entry = readdir($dir_handle)) {
      if(in_array($entry, array('.', '..')))
    	
	     continue; // Passage au tour de boucle suivant
      $path = "$dir/$entry";
      is_dir($path) ? $num += count_files($path) : $num++;
		
   }
   closedir($dir_handle);
   return $num;
}
?><?php echo "(".count_files('../ADMIN/explorer/data/files/'.$_GET['n_doss']).")" ;  ?>

Mammouth du PHP | 568 Messages

16 mai 2012, 10:44

Sinon, il y aussi le fonction http://fr.php.net/glob

Mammouth du PHP | 702 Messages

16 mai 2012, 11:42

voila avec la fonction glob
<?php
function count_files($dir) {
   $num = 0;
   if(!is_dir($dir))
      return is_file($dir) ? 1 : false;
   foreach(glob("$dir/*") AS $entry) {
      if(!in_array($entry, array('..', '.'))
         $num += count_files("$dir/$entry");
   }
   return $num;
}
?>