Taille d'un répertoire

Par vavoir, il y a 12 ans


Bonsoir,
J'ai une fonction qui me renvoie la taille d'un fichier, de ce côté la tout se passe bien en revanche pour les répertoires(dossier) tout plante et je ne comprend pas d'ou vient le problème ?

la function:

function taille($fichier){
        // Lecture de la taille du fichier
        $taille = filesize($fichier);
        // Conversion en Go, Mo, Ko
        if ($taille >= 1073741824) 
        { $taille = round($taille / 1073741824 * 100) / 100 . " Go"; }
        elseif ($taille >= 1048576) 
        { $taille = round($taille / 1048576 * 100) / 100 . " Mo"; }
        elseif ($taille >= 1024) 
        { $taille = round($taille / 1024 * 100) / 100 . " Ko"; }
        else 
        { $taille = $taille . " Octet"; } 
        if($taille==0) {$taille="-";}
        return $taille;
    }

3 réponses

Vallyan, il y a 12 ans

Ben sa plante parce que c'est pas fait pour, fichier != repertoire.

Pour un directory, tu peux boucler sur les fichiers qu'il contient et additionner les différentes tailles.
Sinon pour un truc plus académique il y a ca.

vavoir, il y a 12 ans

Tout s'explique ^^ Je viens de fouiller la doc je vais voir si j'arrive à adpater " disk_total_space" à la place de "filesize".

vavoir, il y a 12 ans

EUREKA !

function taille_dossier($rep){
    $racine=@opendir($rep);
    $taille=0;
    while($dossier=@readdir($racine)){
      if(!in_array($dossier, array("..", "."))){
        if(is_dir("$rep/$dossier")){
          $taille+=taille_dossier("$rep/$dossier");
        }else{
          $taille+=@filesize("$rep/$dossier");
        }
      }
    }
    @closedir($racine);
   if ($taille >= 1073741824) 
        { $taille = round($taille / 1073741824 * 100) / 100 . " Go"; }
        elseif ($taille >= 1048576) 
        { $taille = round($taille / 1048576 * 100) / 100 . " Mo"; }
        elseif ($taille >= 1024) 
        { $taille = round($taille / 1024 * 100) / 100 . " Ko"; }
        else 
        { $taille = $taille . " Octet"; } 
        if($taille==0) {$taille="-";}
        return $taille;
  }

Oublié disk_total_space