Lister les fichiers contenus dans un répertoire en php [Résolu]

Messages postés
9
Date d'inscription
dimanche 17 février 2013
Statut
Membre
Dernière intervention
31 juillet 2013
- - Dernière réponse : jordane45
Messages postés
25946
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juillet 2019
- 25 juil. 2013 à 14:17
]Bonsoir les amis
en fait j ai un petit problème : je voudrais faire un input avec bouton valider dans lequel l utilisateur tape le chemin absolu d'un dossier et puis parcourir ce dossier et lister tous les fichiers qu'il contient y compris ceux qui dont dans les sous dossiers . ( par exemple si j ai un dossier qui s'appelle exam et qui contient des fichiers pdf et un dossier qui s'appelle cours qui contient lui des fichiers doc il doit me lister tous les fichier pdf et les fichiers doc et non pas ler dossier )
j ai essayé de faire mais il me liste tous les dossiers et les fichiers et ne parcours pas l arborescence !!
je me demande où je l'ai bien raté !!

voici mon code :
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
25946
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juillet 2019
313
3
Merci
Pense à mettre le sujet en résolu :
REPONSE ACCEPTEE.


PS: Au cas où, une fonction qui liste l'ensemble des fichiers d'un répertoire (en récursif ou non) avec la possibilité de choisir le type de fichier que l'on veut lister :

Fonction : LISTE_FICHIERS

<?php
/*
PARAMETRES:
$folder : Chemin du dossier à parcourir
$ext : Tableau contenant la liste des extensions à rechercher.
       Si vide ou null, liste TOUS les fichiers
$recursif : Paramtre indiquant si l'on souhaite rechercher dans les sous dossiers
            Par défaut : TRUE
RETOUR : Un tableau contenant l'ensemble des fichiers trouvés 
*/
function ListFiles($folder,$ext=array(''),$recursif=true) {
 $files = array();
 $dir=opendir($folder);
 while ($file = readdir($dir)) {
 if ($file '.' || $file '..') continue;
 if (is_dir($folder.'/'.$file)) {
 if ($recursif==true)
$files=array_merge($files, ListFiles($folder.'/'.$file, $ext));
 } else {
if(empty($ext)){ //Si aucune extension définie, on prend tout..
$files[] = $folder.'/'.$file;
}else{
foreach ($ext as $v) {
if (strtolower($v)==strtolower(substr($file,-strlen($v)))) {
$files[] = $folder.'/'.$file;
break;
}
 }
 }
 }
 }
 closedir($dir);
 return $files;
}
?>


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 131 internautes nous ont dit merci ce mois-ci

Commenter la réponse de jordane45
Messages postés
25946
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juillet 2019
313
1
Merci
Bonjour,

Pense à clore cette question => REPONSE ACCEPTEE.

Pour cette nouvelle question, tu aurais normalement du, ouvrir un nouveau sujet sur le forum..

Mais bon,
Test ceci :

// $dossier -> Chemin ABSOLU du repertoire à parcourir
$dossier='C:\\wamp\\www\\PERSO\\myteams';

$files=ListFiles($dossier,null,true);
foreach ($files as $file){
print($file.'<br>');
print(realpath($file)."<br>");
print(find_relative_path(getcwd(),$file).'<br>');
echo '<br>';
}

//---------------- FONCTIONS ----------------------//
function ListFiles($folder,$ext=array(''),$recursif=true) {
$files = array();
$dir=opendir($folder);
while ($file = readdir($dir)) {
if ($file '.' || $file '..') continue;
if (is_dir($folder.'/'.$file)) {
if ($recursif==true)
$files=array_merge($files, ListFiles($folder.'/'.$file, $ext));
} else {
if(empty($ext)){ //Si aucune extension définie, on prend tout..
$files[] = $folder.'/'.$file;
}else{
foreach ($ext as $v) {
if (strtolower($v)==strtolower(substr($file,-strlen($v)))) {
$files[] = $folder.'/'.$file;
break;
}
}
}
}
}
closedir($dir);
return $files;
}

/**
 * 
 * Find the relative file system path between two file system paths
 *
 * @param  string  $frompath  Path to start from
 * @param  string  $topath    Path we want to end up in
 *
 * @return string             Path leading from $frompath to $topath
 */
function find_relative_path ( $frompath, $topath ) {
    $from = explode( DIRECTORY_SEPARATOR, $frompath ); // Folders/File
    $to = explode( DIRECTORY_SEPARATOR, $topath ); // Folders/File
    $relpath = '';
 
    $i = 0;
    // Find how far the path is the same
    while ( isset($from[$i]) && isset($to[$i]) ) {
        if ( $from[$i] != $to[$i] ) break;
        $i++;
    }
    $j = count( $from ) - 1;
    // Add '..' until the path is the same
    while ( $i <= $j ) {
        if ( !empty($from[$j]) ) $relpath .= '..'.DIRECTORY_SEPARATOR;
        $j--;
    }
    // Go to folder from where it starts differing
    while ( isset($to[$i]) ) {
        if ( !empty($to[$i]) ) $relpath .= $to[$i].DIRECTORY_SEPARATOR;
        $i++;
    }
    
    // Strip last separator
    return substr($relpath, 0, -1);
}


?>




Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
Messages postés
25946
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juillet 2019
313
0
Merci
Bonjour,

Je pense que le souci est lié à votre ligne :
list_dir($fichier);


$fichier contient le nom d'un dossier, pas son chemin complet.
Essayez avec :
if(is_dir($dossier.'/'.$fichier)){
 list_dir($dossier.'/'.$fichier)
};


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
Messages postés
28
Date d'inscription
mardi 25 octobre 2005
Statut
Membre
Dernière intervention
8 octobre 2013
1
0
Merci
Bonjour,

Petite recherche sur internet, et la fonction qui va bien suit :
Link

<?php
function parcourir_repertoire($repertoire)
{
    $le_repertoire = opendir($repertoire) or die("Erreur le repertoire $repertoire existe pas");
    while($fichier = @readdir($le_repertoire))
    {
        // enlever les traitements inutile
        if ($fichier "." || $fichier "..") continue;

        if(is_dir($repertoire.'/'.$fichier))
        {
            print '<ul>'.$repertoire.'/'.$fichier;
            parcourir_repertoire($repertoire.'/'.$fichier);
            print '</ul>';
        }
        else
        {
            print "<li> $fichier  </li>";
        }
    }
    closedir($le_repertoire);
}

parcourir_repertoire('C:\util\wamp\www\exemple\www');

?>
Commenter la réponse de nicotontige
Messages postés
9
Date d'inscription
dimanche 17 février 2013
Statut
Membre
Dernière intervention
31 juillet 2013
0
Merci
mercii jordane45 en faite j' ai dû faire

if(is_dir($name.'/'.$fichier)){
list_dir($name.'/'.$fichier)
};

votre remarque m'a été utile :)

mercii également à toi nicotontige ;)
Commenter la réponse de safafed
Messages postés
9
Date d'inscription
dimanche 17 février 2013
Statut
Membre
Dernière intervention
31 juillet 2013
0
Merci
Merciii beaucoup Jordan, en fait c'est ce que j'étais en train de faire :)

juste un truc de plus, là j'aurais besoin du chemin relatif de chaque fichier, il est possible de récupérer le chemin absolu mais je ne vois pas comment parvenir à extraire un chemin relatif depuis le ce chemin absolu qu'on a obtenu ( considérant l exemple que j ai cité en haut pour les doc je dois avoir /exams/cours/----.doc et pour les pdfs /exams/-----.pdf ) !!
Commenter la réponse de safafed
Messages postés
9
Date d'inscription
dimanche 17 février 2013
Statut
Membre
Dernière intervention
31 juillet 2013
0
Merci
c est bon j ai trouvé :)

juste pour ceux qui qui vont poser la même question voilàà la réponse :

<?php
$string = "ma chaine";
$tab = explode("séparateur(emplacement par lequel je vx que le chemin relatif commence)",$string);
unset($tab[0]);
$sep = "séparateur";
foreach ($tab as $value) { echo $sep.$value; }
?>

Mercii à vous tous les amis pour votre aide :)

Cordialement !
Commenter la réponse de safafed