Accueil > Forum > > > > Lister contenu d'un repertoire avec tailles fichiers et dossiers
Lister contenu d'un repertoire avec tailles fichiers et dossiers
samedi 8 août 2009 à 12:32:24 |
Lister contenu d'un repertoire avec tailles fichiers et dossiers

harmonyk
|
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 :
- 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 =)
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é
Code PHP : <?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>
<body>
<table align='center' height='auto'>
<tr>
<td height='100px'><h1>Listing du répertoire</h1></td>
</tr>
";
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.="
<tr>
<td><img src='images/Dossier.png'> <a href=\"".$_SERVER['PHP_SELF']."?chemin=".$path."/".$file."\">$file</a></td>
<td>".mille($size)."</td>
</tr>";
}
else
{
$size=filesize($path.DIRECTORY_SEPARATOR.$file);$dir="";
$fichier.="
<tr>
<td><img src='images/fichier.png'> <a href=\"".$path.DIRECTORY_SEPARATOR.$file."\">$file</a></td>
<td>".mille($size)."</td>
</tr>";
}
$total+=$size;
}
echo $dossier.$fichier."
<tr height='30px'><td></td></tr>
<tr>
<th>TOTAL :</th><th>".mille($total)."</th>
</tr>
</table>
</body>";
?>
|
|
dimanche 9 août 2009 à 11:12:41 |
Re : Lister contenu d'un repertoire avec tailles fichiers et dossiers

TychoBrahe
|
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 =)
En utilisant scandir() ou une instance de la classe Directory tu aurai tout dans l'ordre directement. Sinon si tu veux conserver ton système, tu peux tout stocker dans un tableau puis utiliser une fonction de tri dessu.
|
|
Cette discussion est classée dans : file, contenu, path, size, tailles
Répondre à ce message
Sujets en rapport avec ce message
Formulaire d'insertion et upload d'image [ par hasselblad ]
HasselbladBonjour,AU SECOURRRSSSS !!!!JE travaille sous DM MX, et je créé avec des formulaires d'insertion d'enregistrement afin de mettre a jour une
Comment éviter le "Max File Size Exceeded" ? [ par Tomcube ]
Salut !Ma question est : y-a-t'il un moyen en PHP ou autre d'éviter que le message "Max File Size of xxx bytes is exceeded" s'affiche lorsque le visit
problème avec substr !! [ par fredo35m ]
pourquoi lorsque je mets ça, ça ne marche pas ??je souhaite juse récupérer le nom du fichier sans extension ni rien (=fichier)il me semble que c'est l
modifier un code sur une gallerie [ par mike501 ]
bonjour, je vien de trouver une galerie a mon gout mais le souci c est que les image ce mette toute sur la meme page estce que quelq un pourrai m aide
je suis desesperer [ par mike501 ]
bonjour, je voudrai savoir si quelq'un pourrai m aider, j ai une gallerie d image mais le souci ces que toute les image sont sur la meme page, je voud
Comment lire le contenu d'une page web ? [ par poiuytrez3 ]
Bonjour, je cherche comment lire le contenu d'une page web distante avec PHP, sachant que je n'ai aucune autorisation sur cette page à part la lire.
Comment lire le contenu d'une page web ? [ par poiuytrez3 ]
Bonjour, je cherche comment lire le contenu d'une page web distante avec PHP, sachant que je n'ai aucune autorisation sur cette page à part la lire.
creer un compteur [ par mike501 ]
bonjour, je vien de trouver une galerie a mon gout mais le souci c est que les image ce mette toute sur la meme page estce que quelq un pourrai m aide
creer un compteur sur gallerie [ par mike501 ]
bonjour, je vien de trouver une galerie a mon gout mais le souci c est que les image ce mette toute sur la meme page estce que quelq un pourrai m aide
creer un compteur [ par mike501 ]
bonjour, je vien de trouver une galerie a mon gout mais le souci c est que les image ce mette toute sur la meme page estce que quelq un pourrai m aide
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|