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 );