Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
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/07/2008, 22h04   #1
Membre actif
 
Inscription : avril 2007
Messages : 483
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : avril 2007
Messages : 483
Points : 189
Points : 189
Par défaut Lister les dossiers en php

bonjour,

Je travaille sous unix, et j'ai comme projet de monter une appli web interne a l'entreprise.

Dans mon travail j'ai besoin de lister les répertoires non cachés (dont le nom ne commence donc pas par un point) dans une page html, je passe donc par le php pour cela.

J'ai tout d'abord récupéré la liste des fichiers et dossiers du répertoire courant, puis à l'aide de la fonction is_dir(), j'affiche uniquement les dossiers.

J'ai ensuite un test pour ne pas afficher les dossiers de retour '.' et '..'

Par contre, je n'arrive pas à enlever de l'affichage les dossiers cachés.

J'ai essayé les fonctions ereg et preg_match mais aucune des deux ne semblent fonctionner.

Je les ai essayé de la façon suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
//ereg
if (!ereg('.', $myDirectory))
{
    ....
}
 
//preg_match
if (!preg_match("#^.#", $myDirectory))
{
    ....
}
Je pensais également exécuter une commande unix type ls (qui affiche les fichiers et dossiers non cachés dans une console) à l'aide de la fonction php exec() mais je n'ai qu'un nom qui s'affiche et je ne sais pas pourquoi (surement une mauvaise utilisation de la fonction)

J'utilise cette fonction comme ceci :
Merci de m'éclairer si vous avez des idées
Sh4dow49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 09h13   #2
Membre Expert
 
Inscription : janvier 2007
Messages : 1 452
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 452
Points : 1 914
Points : 1 914
Code :
1
2
3
4
5
6
7
$repoonse = array();
$success = false;
$command = "ls";
exec  ( $command, $reponse, $success );
 
echo "L'execution est ".($success?"OK":"KO").".";
pint_r($reponse);
kaymak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 10h52   #3
Membre actif
 
Inscription : avril 2007
Messages : 483
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : avril 2007
Messages : 483
Points : 189
Points : 189
Il me retourne false à chaque fois ...

J'ai essayé le code suivant :
Code :
1
2
3
4
5
6
7
8
9
 
$list = scandir("chemin vers le répertoire");
foreach ($list as $dir)
{
    if (is_dir($dir))
    {
        echo $dir;
    }
}
en faisant ainsi, je ne vois s'afficher que les dossiers . et ..
par contre si j'enlève la vérif is_dir, je vois bien apparaitre tous les fichiers et dossiers du répertoire souhaité.

Hier ce code marchait bien, mais j'avais modifié pour essayer autre chose et depuis que j'ai remis ca ne passe plus et je ne sais pas pourquoi les dossiers ne s'affichent plus ...

Merci de votre aide
Sh4dow49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 11h07   #4
Membre actif
 
Inscription : avril 2007
Messages : 483
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : avril 2007
Messages : 483
Points : 189
Points : 189
j'ai trouvé mon pb, en fait je faisais un ls sur le répertoire courant alors que je voulais lister le répertoire précédent j'ai donc modifié la commande 'ls' en 'ls ..'
Sh4dow49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 11h16   #5
Membre actif
 
Inscription : avril 2007
Messages : 483
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : avril 2007
Messages : 483
Points : 189
Points : 189
Ben en fait cette commande marche qu'à moitié, elle fait bien la liste des fichiers/dossiers du répertoire précédent mais le test is_dir renvoie false à chaque fois ce qui fait que je n'ai rien dans ma liste

Quelqu'un a-t-il une idée ?

Merci d'avance
Sh4dow49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 11h28   #6
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
En utilisant la méthode de départ, pour ne pas afficher les dossiers cachés, pourquoi ne pas faire simplement quelque chose comme :
Code :
1
2
3
4
5
 
if ($myDirectory[0] != '.') // le répertoire ne commence pas par un point
{
    // traitement du répertoire, non caché
}
EDIT : et si tu veux utiliser les expressions régulières, il faut faire :
Code :
1
2
3
4
5
6
7
8
9
10
11
//ereg
if (ereg('^\.', $myDirectory) !== FALSE)
{
    ....
}
 
//preg_match
if (preg_match("#^\.#", $myDirectory) != 0)
{
    ....
}
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 11h37   #7
Membre actif
 
Inscription : avril 2007
Messages : 483
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : avril 2007
Messages : 483
Points : 189
Points : 189
Je n'utilise plus cette méthode car les seuls répertoires qu'il reconnait sont '.' et '..'

En gros, si je ne fais pas le test du is_dir avec cette façon de faire, je vois qu'il récupère bien la liste de tous les fichiers et dossiers, et si je veux épurer pour n'avoir que les dossiers (test du is_dir sur chacun) il ne me reste plus que les dossiers de retour mais je ne vois pas pourquoi
Sh4dow49 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 11h41   #8
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
attention, quand tu fait un is_dir, tu dois lui passer le nom du fichier/dossier... préfixé par le nom du dossier que tu as utilisé pour obtenir la liste des fichiers/dossiers !

Dans ton cas donc, préfixé par ..

Code :
is_dir('../'.$nomFichier)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 11h43   #9
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 606
Points : 3 606
Citation:
Envoyé par Sh4dow49 Voir le message
Je n'utilise plus cette méthode car les seuls répertoires qu'il reconnait sont '.' et '..'
De quelle méthode tu parles ? Au début tu disais bien :
Citation:
Envoyé par Sh4dow49
J'ai tout d'abord récupéré la liste des fichiers et dossiers du répertoire courant, puis à l'aide de la fonction is_dir(), j'affiche uniquement les dossiers.

J'ai ensuite un test pour ne pas afficher les dossiers de retour '.' et '..'

Par contre, je n'arrive pas à enlever de l'affichage les dossiers cachés.
Or, ce que je te propose doit éliminer ces dossiers cachés...
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 11h44   #10
Membre actif
 
Inscription : avril 2007
Messages : 483
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : avril 2007
Messages : 483
Points : 189
Points : 189
Effectivement, cela marche !

Je n'avais pas pensé qu'il testait le nom du fichier dans le répertoire courant.

Merci beaucoup
Sh4dow49 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 03h38.


 
 
 
 
Partenaires

Hébergement Web