Page 1 sur 1

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

Posté : 30 juil. 2005, 18:06
par JazzFinder
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 );

Posté : 30 juil. 2005, 19:41
par Cyrano
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 ?

Posté : 30 juil. 2005, 20:01
par JazzFinder
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!

Posté : 30 juil. 2005, 20:03
par Cyrano
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 ?

Posté : 30 juil. 2005, 20:06
par JazzFinder
Merci.
J'ai essayé sur un serveur de production seulement...

Posté : 30 juil. 2005, 20:39
par JazzFinder
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:

Posté : 30 juil. 2005, 20:57
par Cyrano
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

Posté : 30 juil. 2005, 21:14
par rami
Ca vient peut etre du fait que tu comptes les fichiers '.' et '..' ...

Posté : 30 juil. 2005, 21:17
par Cyrano
ben non puisque la vérification comprend entre autres la fonction is_dir()... :-k