Conversion des unités informatique (o, kio, mio, gio, tio...)

Description

Bonjour,

Cette classe utilitaire permet de convertir une taille (d'un fichier) d'une unité à une autre.
De calculer l'unité la taille la plus adapté pour un affichage.

Attention à ne pas confondre les unités de la norme CEI et SI (http://fr.wikipedia.org/wiki/Pr%C3%A9fixe_binaire).
1 ko (kilooctet) = 1000 octets
1 kio (kibioctet) = 1024 octets

Source / Exemple :


<?php

namespace File\Unit;

require_once __DIR__."/Exception.class.php";

/**



class Binary

{

	const OCTET = 1;	const o = 1; 

	const KIBIOCTET = 2; const Kio = 2;

	const MEBIOCTET = 3; const Mio = 3;

	const GIBIOCTET = 4; const Gio = 4;

	const TEBIOCTET = 5; const Tio = 5;

	const PEBIOCTET = 6; const Pio = 6;

	const EXBIOCTET = 7; const Eio = 7;

	const ZEBIOCTET = 8; const Zio = 8;

	const YOBIOCTET = 9; const Yio = 9;

	

	/*______________________________________________________________________________________*/

	/**

  • Teste si l'unité existe.
  • @param Binary::__CONST__ $unit
  • @return bool
  • /
private static function exists($unit) { return ($unit >= self::OCTET && $unit <= self::YOBIOCTET); } /*______________________________________________________________________________________*/ /**
  • Permet de convertir une taille exprimée en octet en bit.
  • @param int $size
  • @param int $defineByte Représentation d'un byte.
  • @return int
  • /
public static function octetToBit($size) { return $size * 8; } /*______________________________________________________________________________________*/ /**
  • Permet de convertir une taille exprimée en bit en octet.
  • @param int $size
  • @return int
  • /
public static function bitToOctet($size) { return $size / 8; } /*______________________________________________________________________________________*/ /**
  • Permet de convertir une taille d'une unité à une autre.
  • @param int $size La taille.
  • @param Binary::__CONST__ $unitFrom L'unité de départ.
  • @param Binary::__CONST__ $unitTo L'unité d'arrivé.
  • @return int La nouvelle taille après conversion.
  • /
public static function convert($size, $unitFrom, $unitTo) { if(!is_numeric($size)) throw new InvalidArgumentException('param $size must be an integer'); if(!self::exists($unitFrom)) throw new InvalidArgumentException('incorrect $unitFrom param'); if(!self::exists($unitTo)) throw new InvalidArgumentException('incorrect $unitTo param'); if($unitFrom === $unitTo) return $size; return self::doConvert($size, $unitFrom, $unitTo); } /*______________________________________________________________________________________*/ private static function doConvert($size, $unitFrom, $unitTo) { $diff = abs($unitTo - $unitFrom); if($diff === 0) throw new RuntimeException('Erreur lors du calcul de l\'unité'); $x = 1024; for($i = 1; $i < $diff; $i++) $x *= 1024; return (($unitFrom < $unitTo)? ($size / $x) : ($size * $x)); } /*______________________________________________________________________________________*/ /**
  • Renvoie la meilleur unité (ex: 2048 octets -> renvoie self::__KIBIOCTET__ car 2 KiB est la meilleur unité.
  • @param int $size La taille.
  • @param Binary::__CONST__ $unit L'unité.
  • @return int La meilleur unité.
  • /
public static function getBestUnit($size, $unit) { $size = self::convert($size, $unit, self::OCTET); if($size >= 1208925819614629174706176) $unit = self::YOBIOCTET; elseif($size >= 1180591620717411303424) $unit = self::ZEBIOCTET; elseif($size >= 1152921504606846976) $unit = self::EXBIOCTET; elseif($size >= 1125899906842624) $unit = self::PEBIOCTET; elseif($size >= 1099511627776) $unit = self::TEBIOCTET; elseif($size >= 1073741824) $unit = self::GIBIOCTET; elseif($size >= 1048576) $unit = self::MEBIOCTET; elseif($size >= 1024) $unit = self::KIBIOCTET; else $unit = self::OCTET; return $unit; } } ?>

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.