Calcul ordre de grandeur automatique pour taille de fichier (octet, ko, mo, go, to...)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 153 fois - Téléchargée 27 fois

Contenu du snippet

Fonction permettant de retourner un ordre de grandeur pour la taille en octet.

Source / Exemple :


<?php
function unite($octet, $round){
	$unite_spec = array('octets','Ko','Mo','Go','To');
	$count=0;
	$c = count($unite_spec);
	while($octet>=1024 && $count<$c-1){
		$count++;
		$octet/=1024;
	}
	if($round>=0){
		$arr = pow(10,$round);
		$number = round($octet*$arr)/$arr;
	} else {
		$number = $octet;
	}
	return($number.' '.$unite_spec[$count]);
}
?>

Conclusion :


J'ai déjà trouvé une fonction similaire sur ce site mais "mal" faite.
Celle-ci est drolement simple à comprendre et fonctionne très bien ;)
J'ai maintenant rajouté des options pour empècher le dépassement de capaciter au cas ou il y aurait des fichiers plus gros que 1024 To... Ce qui est physiquement impossible (pour le moment ;)), mais si vous utilisez cette fonction avec l'addition de tous vos fichiers...
Si vous êtes soucieux de la rapidité, vous n'avez qu'à enlever cette option.

J'ai rajouté aussi une fonction pour arrondir le nombre obtenue... Si vous ne voulez pas arrondir, mettez $round < à 0.

A voir également

Ajouter un commentaire

Commentaires

seyvapul
Messages postés
41
Date d'inscription
vendredi 15 juillet 2005
Statut
Membre
Dernière intervention
4 juin 2017
-
Une toute petite précision concernant la norme sur les unités mémoires des machines :
1 Ko avec un K majuscule c'est 1024 octets.
1 ko avec un k minuscule c'est 1000 octets.
Au delà, ce ne sont plus des puissance de 2 qui servent de multiplicateurs.
Ainsi 1M "Méga" c'est 1000 kilo et 1G "Giga" c'est 1000 méga de même que actuellement, 1T "Téra" c'est 1000 giga.

Ainsi :
1 To = 1000*1000*1000*1024 octets.
1 Go = 1000*1000*1024 octets.
1 Mo = 1000*1024 octets.
1 Ko = 1024 octets.

Pour info, même si globalement cela n'a que peu d'importance.
cs_GRenard
Messages postés
1663
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
J'ai arrangé ça, tu as raison. J'ai expliqué pourquoi dans l'Explication finale. J'ai mis un count, c'est sur que j'aurais pu mettre aussi un 4 pour améliorer la rapidité.
J'ai rajouté une fonction d'arrondissement à la virgule... Je l'avais fait il y a longtemps mais je ne l'avais pas mis à jour ici :)
Donc le chiffre que vous entrez est le nombre de chiffre après la virgule que vous voulez ou -1 si vous ne voulez pas d'arrondi.
jb_gfx
Messages postés
8
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
16 octobre 2006
-
Il fallait bien sûr lire :

while(($octet>=1024) && ($count < 4)) {

($count inférieur à 4).
Maudite touche majuscule... :P
jb_gfx
Messages postés
8
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
16 octobre 2006
-
Merci pour cette sympathique "petite" fonction.

Par contre je me permet d'ajouter une petite correction (sans doute un oubli) :

Il faut remplacer la ligne :
while($octet>=1024){

Par :
while(($octet>=1024) && ($count > 4)) {

Sinon on a une erreur d'affichage (variable non définie) et il manque l'unité si on dépasse la dizaine de Tera octects. Bon ça doit pas arriver souvent mais comme cette fonction est générique et peut être utilisée pour autre chose qu'afficher des tailles de fichiers je pense qu'il est bon de corriger (de toute façon autant faire au mieux, non?).
cs_GRenard
Messages postés
1663
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
Différent de Kb et Ko ! attention à ca.

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.