|
|
|
|
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>";
?>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 |
Okok alors comment je fais
|
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';
} |
Cela fonctionne si je teste cela en dehors de la fonction sinon un fois inserer dans la fonction ca me donne un resultat faux!
|
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/')); |
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 :) |