Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/08/2011, 09h50   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut Lister tous les répertoires de l'espace web

Bonjour à tous,

Je cherche à faire une fonction qui liste tous les répertoires et sous-répertoires de l'espace www, sans afficher les fichiers. Que les dossiers, donc, en partant de la racine, et avec leur chemin.
J'utilise cette petite fonction récursive :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
function recursive_lect($path){
    $result = array();
    if(!is_dir($path) || !is_readable($path))
    return 0;
    $fd = dir($path);
    while($file = $fd->read()){
        if(($file != ".") && ($file != "..")){
            if(is_dir($path.'/'.$file)){
            	$result = array_merge($result, recursive_lect($path.'/'.$file));
			}
           	else
			{
           	$result[] = $path;
			}
        }
    }
    $fd->close();
    return $result;
}
Mais le tableau retourné contient plusieurs fois la même ligne avec le même chemin / même dossier...comme si la boucle en rajoutait une couche à chaque tour. Comment simplifier cela ? Ça gagnerait surement du temps et des ressources...
Merci de votre aide.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 10h25   #2
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
La SPL propose tout ce qu'il faut pour parcourir des dossiers :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
$folder = './';
$dossier 	= new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder),true);
$compteur 	= 0;
foreach($dossier as $file)
{
	if($file->isDir())
	{
			echo str_repeat('-',$dossier->getDepth()).' '.$file->getFilename().'<br />';
	}
}
L'exemple si dessus liste tous les dossiers présent dans le dossier précisé par $folder
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 10h32   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour et merci de ta réponse,

J'ignorais ce qu'était la SPL, alors, déjà, merci du tuyau.
Je vais éplucher la doc.
Mais déjà, avec ton code, brut de décoffrage, j'obtiens :

Citation:
Fatal error: Trying to clone an uncloneable object of class RecursiveIteratorIterator in D:\EasyPHP5.2.10\www....
sur la ligne :

Code :
1
2
 
$dossier 	= new RecursiveIteratorIterator(new RecursiveDirectoryIterator($folder),true);
J'ai essayé en passant ../ , ou ./ et même $_SERVER['DOCUMENT_ROOT']

Y-a-t-il quelque chose à instancier ? A installer ? Je suis en PHP 5.2.

EDIT : Erreur résolue avec l'instruction :
Code :
1
2
 
ini_set('zend.ze1_compatibility_mode', 0);
Maintenant je vais voir comment afficher les chemins de chaque dossiers.
Mais déjà c'est une super piste !
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 10h51   #4
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Cette erreur provient généralement de la directive zend.ze1_compatibility_mode qui est à On dansle php.ini

C'est fortement conseillé de ne pas l'utiliser et de passer à du vrai développement php5

-- Edit --
J'avais pas vu ton édition ^^

Voir la doc pour toutes les possibilité des objets parcourus : http://www.php.net/manual/fr/class.d...ryiterator.php,

dans ton cas , getPath ou getPathName devrait faire l'affaire.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 10h53   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Citation:
C'est fortement conseiller de ne pas l'utiliser et de passer à du vrai développement php5


Peux-tu préciser ?
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 11h09   #6
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Oui super : Je suis dans la doc et il y a tout ce dont j'ai besoin.
Merci pour ton aide précieuse.
Bonne journée !
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2011, 11h19   #7
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Cette directive est utiliser pour garder une compatibilité entre php4 et php5 au niveau du passage des objets en argument qui sont passer par valeur au lieu d'être passé par référence comme c'est le cas depuis php5.

Donc si tu n'as pas de vieux code php4 qui nécessite cette directive tu peux (dois) la désactiver
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h43.


 
 
 
 
Partenaires

Hébergement Web