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 :

Récupérer liste des fichiers dans des dossiers et sous dossiers


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut Récupérer liste des fichiers dans des dossiers et sous dossiers
    Bonjour

    J'ai créé une classe php, dans laquelle j'ai une fonction qui doit parcourir la liste de mes dossiers pour sortir tous les fichiers qui se trouvent dedans. Il peut également y avoir des sous dossiers dans les dossiers.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    function searchDoc($dossier) {
    	$dir = opendir($dossier) or die('Problème d\'ouverture du dossier.');
    	$str = '<ul class="doc">';
     
    	while($doc = readdir($dir)) {
    		if($doc != '.' && $doc != '..') {
    			if(is_dir($dossier.$doc)) {
    				searchDoc($doc);
    			} else {
    				$str .= '<li><a href="'.$dossier.'/'.$doc.'" target="_blank">'.$doc.'</a></li>';
    			}
    		}
    	}
    	closedir($dossier);
    	$str .= '</ul>';
     
    	return $str;
    }
    Premier problème : je reçois une erreur sur la ligne où j'appelle la fonction dans la fonction (dans le if is_dir) :
    Call to undefined function searchDoc() ...
    J'ai cru lire sur le net qu'il fallait que la fonction soit déclarée en dehors de la classe pour que ça fonctionne. Sauf que si je fais ça, mon premier appel à ma fonction (qui n'apparaît pas ici) me ressort que la fonction n'existe pas.

    Comment puis-je faire ?

    Ensuite, un autre problème que j'ai : je souhaite afficher des fichiers suivant des filtres. Par exemple lister tous les fichiers se trouvant dans tel sous dossier. Bon ça devrait aller pour ça, par contre, je dois également lister les 5 fichiers les plus récents dans tous les dossiers confondus.
    Mais comment puis-je faire ça ?

    Je pensais récupérer la date de chaque fichier et mettre dans un tableau mais je ne vois pas bien comment tout ça peut fonctionner.

    Un peu d'aide serait la bienvenue, merci !

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    utilise plutôt RecursiveDirectoryIterator

  3. #3
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Merci pour cette information

    J'arrive donc à lister mes fichiers, même dans les sous-dossiers !

    Maintenant, comment pourrais-je faire pour mon second problème ? Y'aurait-il un moyen rapide de lister les 5 fichiers les plus récents uploadés peu importe dans quel dossier ?

    Je pensais créer un tableau avec le lien du fichier et la date pour tous les fichiers, et ensuite le trier suivant la date. Mais si j'ai beaucoup de fichiers, ça me paraît être long comme méthode ! Quelle serait donc la meilleure façon ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    C'est faisable, il suffit de trier avec FilterIterator

  5. #5
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Je viens de regarder ce que tu proposes mais j'ai l'impression que c'est pratique si je sais d'avance le critère que je veux.
    Ex : si je veux un fichier datant du 25 avril, je peux poser ma condition.

    Mais pour comparer les fichiers entre eux, j'ai un peu de mal à voir comment ça fonctionne

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Tu peux récupérer la date des fichier donc y'a pas de problème

  7. #7
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Oui je peux le faire, mais ça ne change pas l'argument du validateur.
    Et du coup je dois mettre quoi en argument du validateur ? Une date fixe ?
    J'avoue que là j'ai du mal à concevoir le truc

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    ça dépend du besoin, tu veux les 5 derniers fichier par rapport à une date?

  9. #9
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Les 5 derniers fichiers qui ont été uploadés/modifiés.
    Donc les 5 qui ont la date la plus récente.

  10. #10
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    si tu veux pas t’embêter utilise le composant Finder de Symfony

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    use Symfony\Component\Finder\Finder;
     
    $finder = new Finder();
     
    $files = $finder
        ->files()
        ->in(__DIR__)
        ->sortByChangedTime()
        ->getIterator()
    ;
     
    foreach (new LimitIterator($files, 0, 5) as $file) {
        echo $file;
    }

  11. #11
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Merci beaucoup pour ta réponse !

    Juste une question, en fait ça me surprend que l'on puisse "mixer" du symfony dans du php comme ça, il n'y a rien de gênant ? Enfin je veux dire, je vais me servir de Symfony uniquement pour ça, donc rien de spécial à télécharger pour autant ? (d'autant plus que je suis dans un module pour un CMS).

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727

  13. #13
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Merci pour ton aide stealth35 !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/02/2015, 20h07
  2. Récupérer des fichiers dans des repertoires et sous répertoires
    Par philcphilc dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 05/09/2013, 19h37
  3. Extrcation automatique des fichiers dans des dossiers
    Par vinvol dans le forum VBScript
    Réponses: 6
    Dernier message: 16/06/2012, 22h12
  4. Réponses: 1
    Dernier message: 18/01/2009, 09h34
  5. Récupérer des valeurs dans des fichiers html
    Par nico93100 dans le forum Langage
    Réponses: 1
    Dernier message: 05/01/2006, 21h46

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