[PHP] taille dossier
Newbie
-
Willy's gang -
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
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>";
?>
A voir également:
- [PHP] taille dossier
- Comment réduire la taille d'un fichier - Guide
- Dossier appdata - Guide
- Afficher taille dossier windows - Guide
- Reduire taille image - Guide
- Impossible de supprimer un dossier - Guide
13 réponses
Prend plutôt cette fonction, j'aime pas trop la fonction que tu utilise, surtout le global.
Fonctionne parfaitement chez moi :)
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 :)
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]);
}
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]);
}
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]);
}
bon j'ai trouver un script qui fais ce que je veux correctement sauf qu'il me donne la taille en octets!
mon prob est que je n'arrive pas a mettre dans la fonction la conversion en ko et Mo
<?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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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?
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?
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??
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??
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!
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
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
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.
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.
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...
Ben, tu met juste les 3 conditions dans cette fonction.
Et y' a plus qu'à faire :
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/'));