Compter les fichiers d'un répertoire incluant ses sous-rép.

Eléphant du PHP | 417 Messages

30 juil. 2005, 18:06

Bonjour à tous,
J'utilise depuis plus d'un an un script que j'ai bidouillé pour compter les fichiers d'un répertoire donné incluant ceux de ses sous-répertoires. Sauf que je viens de me rendre compte qu'il incluait dans le comptage les sous-répertoires aussi! Je m'explique:

Si le rép. X contient 2 fichiers et un sous rép. X-1 qui ne contient qu'un seul fichier, le compte est de 5 (2 rép. + 3 fichiers), alors qu'il devrait être 3 (fichiers seulement).

Quelles modif. dois-je apporter pour qu'il ne compte que les fichiers? Merci d'avance.
/*
* Compte les fichiers d'un répertoire. Compte les fichiers des sous-répertoires si le 2ème paramètre est à "true".
* @param   string  $sFolderPath      Path to directory.
* @param   boolean $bCountSubfolders Si à "true" comptera les fichiers dans les sous-rep. aussi.
* @return integer - Nombre de fichiers dans un répertoire.
* True ets mis par défaut
*/

function countFilesInDirectory( $sDirectoryPath, $bCountSubdirectories = true )
{
$iFiles = 0;
        
    if ( is_dir( $sDirectoryPath ) === false )
    {
     return $iFiles;
     }
        
$sDirectoryPath = $sDirectoryPath[ strlen( $sDirectoryPath ) - 1 ] === '/' ? $sDirectoryPath : $sDirectoryPath . '/';
        
$Dir = dir( $sDirectoryPath );
        
$Dir->read();
$Dir->read();
        
    while ( false !== ( $sEntry = $Dir->read() ) )
    {
            if ( is_dir( $sDirectoryPath . $sEntry ) === false )
            {
            $iFiles++;
            }
            else if ( $bCountSubdirectories === true )
            {
            $iFiles += countFilesInDirectory( $sDirectoryPath . $sEntry, $bCountSubdirectories );
            }
   }
        
return $iFiles;
}
Exemple d'utilisation:
print "Nombre de fichiers dans <b>images</b> incluant ses sous-répertoires: " . countFilesInDirectory('images/', true );

Mammouth du PHP | 19672 Messages

30 juil. 2005, 19:41

Je viens de tester ton fichier, je ne trouve pas l'erreur... si tant est qu'il y en ait une : j'ai fait un essai, j'obtiens bien le bon nombre de fichiers et les sous-répertoires ne somt pas comptabilisés comme des fichiers alors que les fichiers qu'ils contiennent le sont bien :-k

Question de configuration ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 417 Messages

30 juil. 2005, 20:01

Merci Cyrano.
J'ai effectué des tests par dizaines et j'obtiens toujours le même résultat...Les sous-rép. sont comptés...Je ne comprend pas!
J'ai même vérifié l'existence de fichiers cachés, en lecture seulement, etc...Paranoïa quand tu nous tiens!

Pour ce qui est de la configuration, rien de spécial...EasyPHP 1.7, win XP...pas de quoi écrire à sa mère!

Mammouth du PHP | 19672 Messages

30 juil. 2005, 20:03

pour ce qui est de ma config, c'est une installation manuelle, PHP5, pas de EasyPHP ni WAMP, et ça fonctionne très bien, j'avoue que je sus perplexe...
L'as-tu essayé online sur un serveur de production ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 417 Messages

30 juil. 2005, 20:06

Merci.
J'ai essayé sur un serveur de production seulement...

Eléphant du PHP | 417 Messages

30 juil. 2005, 20:39

J'ai essayé sur le Net et ça marche correctement. Mystère et boule de gomme! Mettons ça sur le dos de win XP...en attendant Vista! :wink:

Mammouth du PHP | 19672 Messages

30 juil. 2005, 20:57

J'ai essayé sur le Net et ça marche correctement. Mystère et boule de gomme! Mettons ça sur le dos de win XP...en attendant Vista! :wink:
lol, Vista, encore un truc que j'installerai pas avant d'y être vraiment contraint et forcé si je suis pas passé à Linux d'ici là :P
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 983 Messages

30 juil. 2005, 21:14

Ca vient peut etre du fait que tu comptes les fichiers '.' et '..' ...

Mammouth du PHP | 19672 Messages

30 juil. 2005, 21:17

ben non puisque la vérification comprend entre autres la fonction is_dir()... :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: