begin process at 2012 05 30 15:35:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

Lister contenu d'un repertoire avec tailles fichiers et dossiers


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,073 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales