mesure de taille

Afficher la taille d'un fichier avec une unité

Comment formater une taille de fichier avec son unité de mesure en octets, Ko, Mo, Go et To

php taille fichier, autolib nancy, php poids fichier, taille d un fichier en php, php octet mo

Date de publication : 2009-07-15 08:45:33

La fonction suivante formatSize permet d'afficher la taille d'un fichier dans la bonne unité de mesure.

Cette fonction prend une taille en octet en entrée, et retourne une chaine formatée en utilisant le format de sprintf pour formater la taille et ajoute le symbole de l'unité de taille.

Les unités de poids de fichier supportées sont les suivantes :

  • octet, dont le symbole est o en français et B en anglais
  • kilooctet, Ko en français et KB en anglais, équivalent à 10^3 octets
  • megaoctet, Mo en français et MB en anglais, équivalent à 10^6 octets
  • gigaoctet, Go en français et GB en anglais, équivalent à 10^9 octets
  • téraoctet, To en français et TB en anglais, équivalent à 10^12 octets

Je n'ai pas ajouter le support des unités pétaoctet (Po 10^15 octets), exaoctet (Eo 10^18 octets), zettaoctet (Zo 10^21 octets) et yottaoctet (Yo 10^24 octets) car je n'ai encore pas rencontré de fichiers aussi grands. Si vous en avez besoin je vous laisse modifier la fonction vous même ;).

Fonction de formatage de la taille d'un fichier


<?php
/**
* Retourne la taille plus l'unité arrondie
*
* @param mixed $bytes taille en octets
* @param string $format formatage (http://www.php.net/manual/fr/function.sprintf.php)
* @param string $lang indique la langue des unités de taille
* @return string chaine de caractères formatées
*/
function formatSize($bytes,$format = '%.2f',$lang = 'en')
{
static $units = array(
'fr' => array(
'o',
'Ko',
'Mo',
'Go',
'To'
),
'en' => array(
'B',
'KB',
'MB',
'GB',
'TB'
));
$translatedUnits = &$units[$lang];
if(isset($translatedUnits) === false)
{
$translatedUnits = &$units['en'];
}
$b = (double)$bytes;
/*On gére le cas des tailles de fichier négatives*/
if($b > 0)
{
$e = (int)(log($b,1024));
/**Si on a pas l'unité on retourne en To*/
if(isset($translatedUnits[$e]) === false)
{
$e = 4;
}
$b = $b/pow(1024,$e);
}
else
{
$b = 0;
$e = 0;
}
return sprintf($format.' %s',$b,$translatedUnits[$e]);
}
?>

Exemple de formatage de taille de fichier

Voici quelques exemples de chaines de caractères formatées avec la fonction formatSize :


<?php
/* On affiche une taille en français*/
var_dump(formatSize(10240101,'%.2f','fr'));
/*string '9.77 Mo'*/
/* On affiche la même taille en anglais*/
var_dump(formatSize(10240101,'%.2f','en'));
/*string '9.77 MB'*/
/* On affiche une grande taille avec la langue et le formatage par défaut*/
var_dump(formatSize(10240101545343548));
/*string '9313.32 TB'*/
/* On affiche une taille négative */
var_dump(formatSize(-87970));
/*string '0.00 B'*/
?>

Image : menblog

 
 

b1n@sp1n