begin process at 2012 05 27 22:29:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...)

CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...)


 Information sur la source

Note :
Aucune note
Catégorie :Fichier / Disque Classé sous :octet, byte, kibibyte, conversion taille Niveau :Débutant Date de création :02/01/2011 Date de mise à jour :02/06/2011 22:33:00 Vu / téléchargé :6 692 / 95

Auteur : genetApt151

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 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

  • <?php
  • namespace File\Unit;
  • require_once __DIR__."/Exception.class.php";
  • /**
  • * Cette classe permet de convertir une taille dans différentes unités
  • * selon les préfixes binaires (préfixes CEI)
  • * (http://fr.wikipedia.org/wiki/Pr%C3%A9fixe_binaire ou http://en.wikipedia.org/wiki/Binary_prefix#IEC_standard_prefixes)
  • *
  • * @author Guillaume Genet <contact@guillaume-genet.fr>
  • */
  • 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;
  • }
  • }
  • ?>
<?php

namespace File\Unit;

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



/**

 * Cette classe permet de convertir une taille dans différentes unités 

 * selon les préfixes binaires (préfixes CEI) 

 * (http://fr.wikipedia.org/wiki/Pr%C3%A9fixe_binaire ou http://en.wikipedia.org/wiki/Binary_prefix#IEC_standard_prefixes)

 * 

 * @author Guillaume Genet <contact@guillaume-genet.fr>

 */

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;

	}

}

?>


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

02 juin 2011 22:33:01 :
update

 Sources du même auteur

Source avec Zip GÉRER LES ACCÈS À UNE BASE DE DONNÉES VIA UNE DAO
Source avec Zip Source avec une capture SYSTÈME DE PAGINATION COMPLET

 Sources de la même categorie

SUPPRESSION AUTOMATIQUE DES FICHIERS RAW ORPHELINS APRÈS UN ... par malokaff
UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
TROUVER LES DOUBLONS DANS UNE LISTE DE FICHIERS par soobook

 Sources en rapport avec celle ci

Source avec Zip BITWISE HANDLER : GESTION DES BITS POUR GÉRER LES DROITS par aKheNathOn

Commentaires et avis

Commentaire de neigedhiver le 03/01/2011 13:18:23

Salut,

Deux choses :
1/ Une classe pour faire juste ça, je trouve que c'est un peu excessif (mais ce n'est que mon opinion)
2/ Byte et Octet sont deux choses différentes. Ce n'est pas qu'une question de langue : un Byte est un mot d'une longueur de plusieurs bits (7, 8, 16, ...). En informatique, le plus courant est un Byte de 1 octet, soit 8 bits, mais ce n'est pas systématique. La traduction anglaise de "octet" est... "octet".
http://fr.wikipedia.org/wiki/Byte

Pour mon usage perso, je m'étais fait une eptite fonction que je considère comme étant plus simple et largement suffisante :
function format_size($size, $si = FALSE) {
$units_2 = array('o', 'Kio', 'Mio', 'Gio', 'Tio', 'Pio', 'Eio', 'Zio', 'Yio');
$units_si = array('o', 'Ko', 'Mo', 'Go', 'To', 'Po', 'Eo', 'Zo', 'Yo');

$pow = 0;

if ($si) {
$units = $units_si;
$divisor = 1000;
}
else {
$units = $units_2;
$divisor = 1024;
}

while ($size >= $divisor) {
if ($pow > 8) {
break;
}
$size /= $divisor;
$pow++;
}

return round($size, 2).' '.$units[$pow];
}

Certes, elle ne convertit pas d'une unité en une autre, mais cette fonctionnalité de conversion ne me paraît pas du tout indispensable (autant j'ai déjà été amené à concvertir en octets ou en l'unité la plus grande possible avec la valeur comprise entre 0 et 1023), autant je n'ai jamais eu à convertir d'une unité en une autre, en 13 ans...

Commentaire de dark_nemo le 03/01/2011 13:54:51

1octet = 8bits (0000000000 à 11111111) donc 1Ko = 8 192 bits = 1024 octets (2^10) et non 1000 octets.
N'oublions pas que nous sommes dans les puissances de 2 (2,4,8,16,32,64,128,256,1024....), les machines comptent en base 2 avec des 0 et 1 (éteint ou allumé) et non en base 10.

Commentaire de neigedhiver le 03/01/2011 14:43:04

Depusi un peu plus de 10 ans maintenant, il a été défini dans le Système Internationnal que 1 Ko = 1000 octets.
Et que 1Kio = 1024 Octets.
Cette source prend en compte les deux unités.

http://fr.wikipedia.org/wiki/Kilooctet

C'est toujours bien de se renseigner avant de dire des inepties.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

écrire plus d'octet qu'une string.... [ par dark_naruto25 ] Bonjour, le titre n'est pas tr&#232;s clair donc je vais vous expliquer en d&#233;tail : Je transcrit un code C++ en PHP (du moins un code ayant le m& longueur d'une chaine, en byte... [ par pysco68 ] bonjour les gens!!bon je me bats avec une petite fonction qui me génère un fichier  CSV (valeurs séparées par virgule...) jusque là tout va bien le to Perte des premiers zéro en convertissant de l'hexadecimal en octet [ par chalex ] Bonjour,j'ai un problème en cours qui m'a amené à un nouveau problème pour lequel je créé un nouveau sujet.J'ai besoin de faire ce style de conversion


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,655 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales