IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Lister les dossiers en php


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    Il me retourne false à chaque fois ...

    J'ai essayé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    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 ..'

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    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

  6. #6
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //ereg
    if (ereg('^\.', $myDirectory) !== FALSE)
    {
        ....
    }
     
    //preg_match
    if (preg_match("#^\.#", $myDirectory) != 0)
    {
        ....
    }

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    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

  8. #8
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    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...

  9. #9
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    is_dir('../'.$nomFichier)

  10. #10
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    483
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2007
    Messages : 483
    Par défaut
    Effectivement, cela marche !

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

    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lister les dossiers avec un for
    Par AnkyFive dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 25/09/2006, 10h14
  2. [VBA-O] Lister les dossiers dans 'boite de récéption'
    Par Elstak dans le forum VBA Outlook
    Réponses: 1
    Dernier message: 14/08/2006, 11h27
  3. [VB6]lister les dossiers et sous dossier
    Par Jacen dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/04/2006, 08h06
  4. Lister les dossiers et fichiers d'un répertoire
    Par scorpia dans le forum ASP
    Réponses: 2
    Dernier message: 11/04/2006, 18h50
  5. lister les dossiers contenu sur un CD
    Par titicurio dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 06/02/2006, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo