Magazine High tech

Afficher la taille d'un fichier avec une unité - PHP

Publié le 15 juillet 2009 par Petitchevalroux

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'*/
?>

Retour à La Une de Logo Paperblog

A propos de l’auteur


Petitchevalroux 217 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte