Rechercher : dans
Par :

[PHP] taille dossier

Dernière réponse le 14 jun 2006 à 20:32:24 Newbie, le 12 jun 2006 à 18:42:32 
 Signaler ce message aux modérateurs

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>";
?>

Meilleures réponses pour « [PHP] taille dossier » dans :
[PHP] Upload de fichiers VoirLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La...
[PHP] Lister le contenu d'un répertoire VoirGrâce à PHP, il est possible d'afficher le contenu d'un répertoire et de ses sous-répertoires. Voici ci-dessous une fonction permettant de parcourir récursivement les répertoires et sous-répertoires et d'en afficher les fichiers : function...
[PHP] Détecter la résolution d'affichage VoirPHP ne fournit pas de fonction permettant la détection de la résolution d'affichage car l'information concernant l'affichage du visiteur n'est pas fournie nativement par le protocole HTTP. Javascript par contre permet de détecter la résolution...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...

1

Newbie, le 12 jun 2006 à 18:56:50

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

Répondre à Newbie

2

Yvan, le 12 jun 2006 à 21:07:27

$size_ko = round($size / 1024, 2);
return $size_ko;


Tout simplement.

Répondre à Yvan

3

Newbie, le 13 jun 2006 à 00:47:10

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?

Répondre à Newbie

4

Pool Orion, le 13 jun 2006 à 13:53:42

Salut,

Normal, un 'return' veut dire que tu retourne à l'appelant et donc tu quitte la fonction :-)
Pool Orion

Répondre à Pool Orion

5

Newbie, le 13 jun 2006 à 16:09:38

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??

Répondre à Newbie

6

Yvan, le 13 jun 2006 à 17:02:33

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';
}

Répondre à Yvan

7

Newbie, le 13 jun 2006 à 17:24:18

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

Répondre à Newbie

8

Yvan, le 13 jun 2006 à 18:06:39

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.

Répondre à Yvan

9

Newbie, le 14 jun 2006 à 00:26:45

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...

Répondre à Newbie

10

Yvan, le 14 jun 2006 à 17:54:29

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/'));

Répondre à Yvan

11

Newbie, le 14 jun 2006 à 18:14:30

Je veux bien croire que c'est aussi facile mais alors pkoi ca me retourne
O ko au lieu des 754ko detecter par windows?

Répondre à Newbie

12

 Yvan, le 14 jun 2006 à 20:32:24

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 :)

Répondre à Yvan
Collection CommentÇaMarche.net