Bonsoir,

Je cherche à afficher la juste mesure vous savez c'est deux petite lettre (o, ko, mo, go) à côté de la taille d'un fichier en fonction de la taille de l'image qui se trouve dans un répertoire. Voilà ou j'en suis:

$size = filesize("upload-img/".$file);
                        if($size < 1000){
                            $size = $size/1;
                            $size = $size."o";
                        }
                        elseif($size < 1000000){
                            $size = $size/1000;
                            $size = $size."Ko";
                        }
                        elseif($size < 1000000000){
                            $size = $size/1000000;
                            $size = $size."Mo";
                        }
                        elseif($size < 1000000000000){
                            $size = $size/1000000000;
                            $size = $size."Go";
                        }

Les lettres son bonne maintenant il reste à afficher la taille exacte et là je n'y arrive pas peut-être la fatigue ^^. Par exemple pour une des images j'ai 88.2ko mais mon script me donne 90.383Ko ??? or moi je veux afficher: 88.2ko

2 réponses


Glaived
Réponse acceptée
<?php
class Temp{

    public function __construct(){
    }

    public function testFormatSize(){
        $testDatas = 
            1,
            1024
        ];
        foreach($testDatas as $k => $v){
            $formatSize = $this->formatSize($v);
            echo '<pre>';
            echo <<<EOT
Notre test en octets : $v || $formatSize est le rendu de la fonction formatSize()
EOT;
            echo '</pre>';
        }
    }

    /**
    * Retourne la taille plus l'unité arrondie
    *
    * @link http://dev.petitchevalroux.net/php/afficher-taille-fichier-avec-une-unite-php.271.html source
    *
    * @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
    **/
    public function formatSize($bytes, $format='%.2f', $lang='fr'){
        $units = 
            'fr' => 'o','Ko','Mo','Go','To'],
            'en' => '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]);
    }

}
$temp = new Temp;
$temp->testFormatSize();
vavoir
Auteur
Réponse acceptée

@Glaived

J'ai dans un premier copier coller bête la code car je ne maitrise pas les class en php constant que cela ne fonctionner pas j'ai suivie le lien: http://dev.petitchevalroux.net/php/afficher-taille-fichier-avec-une-unite-php.271.html