[PHP] taille dossier

Newbie -  
 Willy's gang -
Bonjour a tous,

je voudrais savoir ou est mon erreur dans mon script pour calculer la taille d'un dossier!

En effet, cela ne me retourne pas la bonne taille

<?php
$size="0";
$folder = "ventes/";     
$dossier = opendir($folder);
while ($Fichier = readdir($dossier)) 
{
  if ($Fichier != "." && $Fichier != "..") 
      {
    $nomFichier = $folder."/".$Fichier;
 $size += filesize($nomFichier);
       }
}

echo "Votre dossier a une taille de $size octets<br>";
?>

13 réponses

  1. Yvan
     
    Prend plutôt cette fonction, j'aime pas trop la fonction que tu utilise, surtout le global.

    function poids($rep)
    {
        $r = @opendir($rep);
        while( $dir=@readdir($r) )
        {
            if( !in_array($dir, array("..", ".")) )
            {
                if( is_dir("$rep/$dir") )
                {
                    $t += poids("$rep/$dir");
                }
                else
                {
                    $t += @filesize("$rep/$dir");
                }
            }
        }
        @closedir($r);
        return $t;
    }
    
    function unite($valeur)
    {
        if( $valeur >= pow(1024, 3) )
        {
            $valeur = round( $valeur / pow(1024, 3), 2);
            return $valeur . ' go';
        }
        elseif( $valeur >=  pow(1024, 2) )
        {
            $valeur = round( $valeur / pow(1024, 2), 2);
            return $valeur . ' mo';
        }
        else
        {
            $valeur = round( $valeur / 1024, 2);
            return $valeur . ' ko';
        }
    }
    
    $dir = './webmail';
    
    
    echo 'taille du dossier : ' . unite(poids($dir));
    

    Fonctionne parfaitement chez moi :)
    3
  2. Willy's gang
     
    avec la fonction de yvan utilise aussi :

    function format_taille($size) {
    if ($size == 0) return "0";
    $liste = array(" octets", " Ko", " Mo", " Go", " To");
    $index = floor(log($size)/log(1024));
    $frm = (($size) ? ("%3.2f") : ("%size"));

    return sprintf("$frm%s", (($size) ? ($size/pow(1024, $index)) : "0"), $liste[$index]);
    }
    1
    1. Willy's gang
       
      rectification de la fonction, desolé ;)

      function format_taille($size) {
        if ($size == 0) return "0";
        $liste = array(" octets", " Ko", " Mo", " Go", " To"); 
        $index = floor(log($size)/log(1024)); 
        $frm = (($size > 1023) ? ("%3.2f") : ("%d")); 
        
        return sprintf("$frm%s", (($size) ? ($size/pow(1024, $index)) : "0"), $liste[$index]); 
      }
      
      0
  3. Newbie
     
    bon j'ai trouver un script qui fais ce que je veux correctement sauf qu'il me donne la taille en octets!

    <?php 
    $sizeG=0;$size=0;
    function recursive_calcul($path) 
    { 
        global $size;
        $O = dir($path); 
        if(!is_object($O)) 
        return false; 
         
        while($file = $O -> read()) 
       { 
            if($file != '.' && $file != '..') 
          { 
                if(is_file($path.'/'.$file)) 
                {
               $sizeF=filesize($path.'/'.$file);
                  $size+=$sizeF;
             }
             else 
                    if(is_dir($path.'/'.$file)) recursive_calcul($path.'/'.$file); 
             } 
             } 
     
        $O -> close(); 
        return $size;
        
    }   
    
    echo recursive_calcul('webmail/');
    ?>
    


    mon prob est que je n'arrive pas a mettre dans la fonction la conversion en ko et Mo
    0
  4. Yvan
     
    $size_ko = round($size / 1024, 2);
    return $size_ko;


    Tout simplement.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Newbie
     
    en effet cela fonctionne mais par contre je ne suis pas un habitue des fonctions en php

    j'ai rajouter ton code
    puis mis
    return $size_ko;
    return $size;

    mais cela n'affiche que le premier return et pas le deuxieme!
    Pkoi et comment y remédié please?
    0
  7. Pool Orion Messages postés 124 Statut Membre 55
     
    Salut,

    Normal, un 'return' veut dire que tu retourne à l'appelant et donc tu quitte la fonction :-)
    0
  8. Newbie
     
    okok alors comment je fais
    car si je mets un echo ou print ca me ressort plein plein de chiffres!!

    dans mon cas je voudrais integrer a la fonction un if

    en effet je voudrais
    que si taille dossier superieur a 1000ko et bah ca affiche en mo
    et si depasse 1000 mo ca s'affiche en go
    et sinon en octets

    je fais ca comment??
    0
  9. Yvan
     
    Ben tu fait un return pour chaque condition différente.

    if( $size >= pow(1024, 3) )
    {
        $size = round( $size / pow(1024, 3), 2);
        return $size . ' go';
    }
    elseif( $size >=  pow(1024, 2) )
    {
        $size = round( $size / pow(1024, 2), 2);
        return $size . ' mo';
    }
    else
    {
        $size = round( $size / 1024, 2);
        return $size . ' ko';
    }
    0
  10. Newbie
     
    cela fonctionne si je teste cela en dehors de la fonction sinon un fois inserer dans la fonction ca me donne un resultat faux!

    je m'explique
    dans le cas ou je met pas ton script
    return ($size) me donne 772083

    mais si je rajoute ton code apres il me donne 0.01 au lieu d'un truc tournant pres de 754ko
    0
  11. Yvan
     
    Ah oui, j'avais pas testé.

    C'est parce que cette fonction fait appel à elle même je pense.

    Le mieux c'est de faire une autre fonction qui t'affichera la bonne unité selon la valeur de $size.
    0
  12. Newbie
     
    euh oui mais bon vu que c'est la premiere fois que j'utilise une fonction je ne vois pas trop comment faire pour en creer une...
    0
  13. Yvan
     
    Ben, tu met juste les 3 conditions dans cette fonction.
    function unite($valeur)
    {
        if( $valeur >= pow(1024, 3) )
        {
            $valeur = round( $valeur / pow(1024, 3), 2);
            return $valeur . ' go';
        }
        elseif( $valeur >=  pow(1024, 2) )
        {
            $valeur = round( $valeur / pow(1024, 2), 2);
            return $valeur . ' mo';
        }
        else
        {
            $valeur = round( $valeur / 1024, 2);
            return $valeur . ' ko';
        }
    }

    Et y' a plus qu'à faire :
    echo unite(recursive_calcul('webmail/'));
    0
  14. Newbie
     
    je veux bien croire que c'est aussi facile mais alors pkoi ca me retourne
    O ko au lieu des 754ko detecter par windows?
    0