[PHP] Calculer la taille d’un dossier

Nouveau snippet aujourd’hui que j’ai été amené à utiliser dans un projet PHP personnel. Ce petit bout de code va vous permettre de calculer la taille d’un dossier, de vous l’arrondir et de vous ressortir la bonne unité entre K, M, G, P et T.

function getFolderSize($path){
	$size = 0;
	foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file){
		$size += $file->getSize();
	}
 
	$factor = (int)(log($size, 1000));
	$units = ['B', 'K', 'M', 'G', 'T', 'P'];
	$size = sprintf("%.2f", $size / pow(1000, $factor)) . $units[$factor];
 
	return $size;
}

À noter que PHP 5.5 peut vous permettre d’éviter d’avoir à traiter un tableau pour la variable $units. La fonction devient alors :

function getFolderSize($path){
	$size = 0;
	foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file){
		$size += $file->getSize();
	}
 
	$factor = (int)(log($size, 1000));
	$units = 'BKMGTP';
	$size = sprintf("%.2f", $size / pow(1000, $factor)) . @$units[$factor];
 
	return $size;
}

Et vous pouvez aussi ajouter un paramètre afin de préciser très facilement le nombre de chiffres après la virgule :

function getFolderSize($path, $decimals = 2){
	$size = 0;
	foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file){
		$size += $file->getSize();
	}
 
	$factor = (int)(log($size, 1000));
	$units = 'BKMGTP';
	$size = sprintf("%.{$decimals]f", $size / pow(1000, $factor)) . @$units[$factor];
 
	return $size;
}

De rien 😉

Aide : la documentation PHP sur la fonction filesize()

Cet article vous a plu ? Partagez-le sur les réseaux sociaux !

Twitter Facebook Google Plus email