[PHP] [Fichiers] Comptage de fichiers

Titre: Comptage de fichiers
Date: Juin 2004
Language: PHP
Description: Code permettant de compter les fichiers d’un répertoire et éventuellement de ses sous-répertoires.

Paramètres:
– $folder = repertoire de comptage
– $ext = extension dont les fichiers sont comptés (peut être un tableau) (sans le . : jpg par exemple) (nombre de caractères variable, càd html aussi valable, mais gare à vous si vous utilisez des fichiers sans extension, vous voici prévenus, :D)
– $subfolders = comptage dans les sous repertoires (true ou false)

Retour:
– nombre de fichier
– -1 en cas d’erreur

Il existe des solutions plus performantes que ce script avec l’évolution de PHP. Cependant, ce script est utile pour apprentissage.

<?php
function count_files( $folder, $ext, $subfolders )
{
	// on rajoute le / à la fin du nom du dossier s'il ne l'est pas
	if( substr( $folder, -1 ) != '/' )
		$folder .= '/';

	// $ext est un tableau?
	$array = false;
	if( is_array( $ext ) )
		$array = true;
	
	// ouverture du répertoire
	$rep = @opendir( $folder );
	if( !$rep )
		return -1;
	
	$nb_files = 0;
	
	// tant qu'il y a des fichiers
	while( ( $file = readdir( $rep ) ) !== false )
	{
		// répertoires . et ..
		if( $file == '.' || $file == '..' )
			continue;
		
		// si c'est un répertoire et qu'on peut le lister
		if( is_dir( $folder . $file ) && $subfolders )
			// on appelle la fonction
			$nb_files += count_files( $folder . $file, $ext,  1);
		// vérification de l'extension avec $array = 0
		else if( !$array && substr( $file, -strlen( $ext ) ) == $ext )
			$nb_files++;
		// vérification de l'extension avec $array = true
		else if( $array && in_array( substr( $file, strrpos( $file, '.' ) + 1 ), $ext ) )
			$nb_files++;
	}
	
	// fermeture du rep
	closedir( $rep );
	
	return $nb_files;
}
?>

Exemple:
Pour compter tous les fichiers .jpg des répertoires et sous répertoires du dossier courant (dossier où se trouve le script):

<?php
echo count_files( '.', array( 'jpg', 'jpeg' ), 1 );
?>

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *