Lister un répertoire (de manière ordonnée)

faiseurdesonges Messages postés 10 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 10 mars 2004 - 3 août 2003 à 12:20
didyman Messages postés 86 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 8 novembre 2007 - 29 déc. 2004 à 00:55
Bonjour, voila j'aimerais lister un répertoire de manière ordonnée, à savoir tout les fichiers du dossier principale puis le premier sous dossier suivi de ses fichiers ensuite retour dans le dossier principale et listing du deuxième sous dossier etc. Normalement je n'ai pas besoin d'aller plus loin que les sous dossier (mais si qqun sait comment faire ça m'interesse quand même :P)

J'avais fais ce petit code:

function lister_repertoire($mon_repertoire) {
$mon_repertoire = '.';

$pointeur = opendir($mon_repertoire);
$files = array();
while($fichier = readdir($pointeur)) {
if(!is_dir($fichier) AND $fichier != "." && $fichier != "..")
$files[] = $fichier;
}
natsort($files);

//Affichage des fichiers et dossiers triés
foreach($files as $v)
echo "$v
";
echo '
' ;

closedir($pointeur);
clearstatcache();

//Liste des repertoires

$pointeur = opendir($mon_repertoire);
$files2 = array();

while($fichier = readdir($pointeur)) {
if(is_dir($fichier) AND $fichier != "." && $fichier != "..")
$files2[] = $fichier;
}

natsort($files2);
closedir($pointeur);
clearstatcache();
echo '
' ;
foreach($files2 as $v) {

$folder = ''.$mon_repertoire.'/'.$v.'' ;
echo $folder ;
echo '
' ;
$pointeur = opendir($folder);
$files = array();

while($fichier = readdir($pointeur)) {
if(!is_dir($fichier) AND $fichier != "." && $fichier != "..")
$files[] = $fichier;
}

natsort($files);
foreach($files as $v)
echo $v . "
";
echo '
' ;

}

} // fin de la fonction

---------

Voila... ça marche très bien mais dés que je retire la ligne $mon_repertoire = '.';
et que je laisse la variable avec par exemple '../divers/' tout commence à disjoncter, comme si la foncton is_dir($fichier) ne répondait plus et je me retrouve avecc dossier et fichier mélangés :-( (sans les sous dossiers)

Lol je suppose que ça va être une grosse bêtise lol mais bon je n'y connais franchement quasi rien en php je l'avoue :-p

mici d'avance..

Songeur

9 réponses

cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
3 août 2003 à 16:40
voila la fonction que jutilise sur mon site pour lister les fichiers de mon site :
www.123toto.com</gras>
0
faiseurdesonges Messages postés 10 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 10 mars 2004
3 août 2003 à 17:25
Mici ^^ mais... euh... j'arrive pas à faire fonctionner ta méthode... :-s... j'ai copié dans un new document html j'ai testé pi j'ai éssayé de changer des truc mais ça n'a jamais marché (même sans rien modifier)

pour ce que tu as mis à propos de mon code, tu veux dire que en mettant readdir($mon_repertoire); une 2ème foi ça passe au dossier parent? ^^ pratique.... mais en fait c pas vraiment ce que je veux j'aimerais lister des dossiers qui sont choisi comme ceci:

<?

if($serv == "pimages") {
$mon_repertoire = '../../../public/Images_divers' ;
$nom= 'images';
}
if($serv == "pprogrammes") {
$mon_repertoire = '../../../public/Programmes_divers' ;
$nom='Petits programmes';
}
if($serv == "pmusiques") {
$mon_repertoire = '../../../public/Divers_musiques';
$nom='Musiques';
//echo "$nom" ;
}
if($serv == "pdivers") {
$mon_repertoire = '../../../public/divers';
$nom='Divers / Délires';
}
if($serv == "pvideos") {
$mon_repertoire = '../../../public/Videos';
$nom='Vidéos';
}
if($serv == "") {
$mon_repertoire = '.';
$nom='Dossier principal';
}

?>

la variable $nom c optionnel...
puis seulement vient la fonction en fait je voudrait faire un listing un peu comme celui que easyphp concoit par defaut pour le dossier root (si tu connais)...
vois tu où je voudrais en venir?....
0
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
3 août 2003 à 17:39
ah ok g compris en + g easyphp aussi :)
donc remplace :
function lister_repertoire($mon_repertoire) {
$mon_repertoire =  '.';

par :
function lister_repertoire($mon_repertoire='.') {

de cette manière si $mon_repertoire est indéfini il prend la valeur '.' (donc ça explore le dossier courant) et sinon il garde la valeur que tu lui a donnée par le premier script ou tu regardes la valeur de $serv.

pke dans la fonction que t'avais faite, $mon_repertoire valait dans tous les cas '.', meme si t'avais donné un autre nom de répertoire.

Houzéf@ - www.123toto.com
0
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
3 août 2003 à 17:44
a mon avis faut changer la ligne :
$folder =  ''.$mon_repertoire.'/'.$v.'' ;

pke si $mon_repertoire='../truc/' , $folder='.../truc/./.$v.
donc remplace ça par :
$folder="$mon_repertoire/$v";
(faut virer les points ça sert a rien car ya déjà les guillemets)

Houzéf@ - www.123toto.com
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Houzefa Messages postés 453 Date d'inscription dimanche 9 février 2003 Statut Membre Dernière intervention 9 juillet 2004 2
3 août 2003 à 17:46
et aussi encore un truc général :
quand tu fais opendir($dossier), faut pas k'il yait un slash a la fin de $dossier.

Houzéf@ - www.123toto.com
0
defkrie Messages postés 435 Date d'inscription vendredi 20 septembre 2002 Statut Membre Dernière intervention 20 novembre 2004
3 août 2003 à 17:47
voila je retrouve plus le site qui traite vraiment bien ce sujet donc je te donne des portions à mediter qui focntionne

<?php

// La fonction d'exploration
function explore($homedir) {

$dir = openDir($homedir);

while ($file = readDir($dir)) {
if (($file!=".")&&($file!="..")) {
// Est-ce que $file est un répertoire ?
// Pour le savoir il suffit d'appeler is_dir()
// mais attention n'oublions pas d'ajouter
// le chemin au nom du fichier
if (is_dir("$homedir/$file")) {
// oui ? alors explorons-le
// REM: On pourrait en plus l'afficher
explore("$homedir/$file");
} else {
// sinon, c'est un fichier et
// on l'affiche
echo "$homedir/$file
";
}
}
}

// C'est fini. On ferme !
closeDir($dir);
}

// Définition du chemin à explorer
$home = "home/repertoire/";

// L'appel à la fonction
explore($home);
?>

ou encore une autre qui calcule la taille d'1 repertoire et prends en compte les sous repertoires pour te monter le concept de recursives :

<?
function spaceDisk($adr=".") {
static $size;
$dp=opendir($adr);
do {
$itm=readdir($dp);
if (is_dir("$adr/$itm") && ($itm!=".") && ($itm!="..") && ($itm!="")) {
spaceDisk("$adr/$itm");
}
elseif (($itm!=".") && ($itm!="..") && ($itm!="")) {
$size = $size + filesize("$adr/$itm");
}
}
while ($itm != false);
closedir($dp);
$size = round($size / (1024*1024),2);
return $size;
}
?>

voila @++
0
defkrie Messages postés 435 Date d'inscription vendredi 20 septembre 2002 Statut Membre Dernière intervention 20 novembre 2004
3 août 2003 à 17:48
voila je retrouve plus le site qui traite vraiment bien ce probleme donc je te donne des portions à mediter qui focntionne

<?php

// La fonction d'exploration
function explore($homedir) {

$dir = openDir($homedir);

while ($file = readDir($dir)) {
if (($file!=".")&&($file!="..")) {
// Est-ce que $file est un répertoire ?
// Pour le savoir il suffit d'appeler is_dir()
// mais attention n'oublions pas d'ajouter
// le chemin au nom du fichier
if (is_dir("$homedir/$file")) {
// oui ? alors explorons-le
// REM: On pourrait en plus l'afficher
explore("$homedir/$file");
} else {
// sinon, c'est un fichier et
// on l'affiche
echo "$homedir/$file
";
}
}
}

// C'est fini. On ferme !
closeDir($dir);
}

// Définition du chemin à explorer
$home = "home/repertoire/";

// L'appel à la fonction
explore($home);
?>

ou encore une autre qui calcule la taille d'1 repertoire et prends en compte les sous repertoires pour te monter le concept de recursives :

<?
function spaceDisk($adr=".") {
static $size;
$dp=opendir($adr);
do {
$itm=readdir($dp);
if (is_dir("$adr/$itm") && ($itm!=".") && ($itm!="..") && ($itm!="")) {
spaceDisk("$adr/$itm");
}
elseif (($itm!=".") && ($itm!="..") && ($itm!="")) {
$size = $size + filesize("$adr/$itm");
}
}
while ($itm != false);
closedir($dp);
$size = round($size / (1024*1024),2);
return $size;
}
?>

voila @++
0
faiseurdesonges Messages postés 10 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 10 mars 2004
3 août 2003 à 18:59
MERCIIIIIIIIIIIII Vous êtes génials!!! Ca marche ^^ en plus j'ai apris pleins de trucs là ^^

--* happy *--
0
didyman Messages postés 86 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 8 novembre 2007
29 déc. 2004 à 00:55
la fonction explore ne fonctione pas chez moi (multimania)

j'ai fait identique et j'ai changer le home mais il ne m'affiche rien... meme pas une erreur!!!

Didyman :-p
0
Rejoignez-nous