Lister contenu d'un repertoire avec tailles fichiers et dossiers
cs_harmonyk
Messages postés37Date d'inscriptionsamedi 16 septembre 2006StatutMembreDernière intervention 5 juillet 2012
-
8 août 2009 à 12:32
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 2013
-
9 août 2009 à 11:12
Bonjour à tous !
J'ai codé il n'y a pas très longtemps ce script me permettant d'afficher le contenu d'un répertoire (ici $path) en indiquant pour chaque ligne s'il s'agit d'un fichier ou d'un dossier ainsi que sa taille.
Je précise également que le script n'est pas dans le répertoire concerné.
Ce qui m'amène à vous exposer mes problèmes étant débutant :
[list]
[*] Les tailles
Ma fonction mille($nb) fonctionne parfaitement sauf pour les tailles en Go, cela m'affiche à chaque fois une valeur en octets, et négative...
[*] Les chemins
Dès que le nom d'un fichier ou dossier contient un accent ou un caractère spécial (+,&,etc...), impossible d'afficher le contenu. Quel est la fonction permettant de résoudre cela ?
[*] Le tri
J'ai vainement essayé de trier tout ça par ordre alphabétique, mais je ne suis arrivé à rien de très concluant, j'ai donc aussi besoin d'un coup de patte à ce sujet =)
/list
Merci d'avoir pris le temps de me lire, Je reste disponible pour de plus amples informations.
Voici donc le script qui, je sais, est pas forcément bien programmé, ni indenté, ni sécurisé
<?php
function sizethis($src)
{
$size=0;
$h = opendir($src);
while (($o = readdir($h)) !== FALSE)
{
if (($o != '.') and ($o != '..'))
{
if (is_dir($src.DIRECTORY_SEPARATOR.$o))
{
$size=$size + sizethis($src.DIRECTORY_SEPARATOR.$o);
}
else
{
$size=$size+filesize($src.DIRECTORY_SEPARATOR.$o);
}
}
}
closedir($h);
return $size;
}
function mille($nb)
{
if ($nb<1024) return $nb." Octets";
else if ($nb<1048576) return round($nb/1024)." Ko";
else if ($nb<1073741824) return round($nb/1048576,1)." Mo";
else return round($nb/1073741824,2)." Go";
}
echo "
<html>
<head>
<title>Listing</title>
</head>
Listing du répertoire
,
\";
if($_GET['chemin']==NULL)
{
$path='repertoire_a_lister';
}
else
{
$path=$_GET['chemin'];
}
$handle=opendir($path);while (false !($file readdir($handle)))
if ($file!='.' && $file!='..' && strtoupper(substr($file,-3)) != \"PHP\")
{
if (is_dir($path.DIRECTORY_SEPARATOR.$file))
{
$size=sizethis($path.DIRECTORY_SEPARATOR.$file);
$dossier.=\"
----
$file,
".mille($size).",
\";
}
else
{
$size=filesize($path.DIRECTORY_SEPARATOR.$file);$dir=\"\";
$fichier.=\"
----
$file,
".mille($size).",
\";
}
$total+=$size;
}
echo $dossier.$fichier.\"
----
,
----
TOTAL : |".mille($total)." |
";
?>
A voir également:
Lister contenu d'un repertoire avec tailles fichiers et dossiers
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 9 août 2009 à 11:12
Salut,
# Les tailles
Ma fonction mille($nb) fonctionne parfaitement sauf pour les tailles en Go, cela m'affiche à chaque fois une valeur en octets, et négative...
Débordement des capacités de l'entier, c'est classique. Je te conseille de lire ce que la doc précise a ce sujet:
Note: Comme le type entier de PHP est signé et que de nombreuses plates-formes utilisent des entiers de 32 bits, filesize() peut retourner des résultats étranges pour les fichiers de taille supérieure à 2 Go. Pour les fichiers entre 2 et 4 Go, cela peut être contourné avec sprintf("%u", filesize($file)).
# Les chemins
Dès que le nom d'un fichier ou dossier contient un accent ou un caractère spécial (+,&,etc...), impossible d'afficher le contenu. Quel est la fonction permettant de résoudre cela ?
Vérifie l'encodage. Dans un cas classique, l'utilisation de utf8_decode() ou utf8_encode() résoud le soucis.
# Le tri
J'ai vainement essayé de trier tout ça par ordre alphabétique, mais je ne suis arrivé à rien de très concluant, j'ai donc aussi besoin d'un coup de patte à ce sujet =)