Lister les fichiers contenus dans un répertoire en php

Résolu
safafed Messages postés 9 Date d'inscription dimanche 17 février 2013 Statut Membre Dernière intervention 31 juillet 2013 - 25 juil. 2013 à 02:53
jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 - 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 :

7 réponses

jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 344
25 juil. 2013 à 12:47
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
3
jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 344
25 juil. 2013 à 14:17
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
1
jordane45 Messages postés 38150 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 29 avril 2024 344
25 juil. 2013 à 11:17
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
0
nicotontige Messages postés 28 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 8 octobre 2013 2
25 juil. 2013 à 12:14
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');

?>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
safafed Messages postés 9 Date d'inscription dimanche 17 février 2013 Statut Membre Dernière intervention 31 juillet 2013
25 juil. 2013 à 12:19
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 ;)
0
safafed Messages postés 9 Date d'inscription dimanche 17 février 2013 Statut Membre Dernière intervention 31 juillet 2013
25 juil. 2013 à 13:28
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 ) !!
0
safafed Messages postés 9 Date d'inscription dimanche 17 février 2013 Statut Membre Dernière intervention 31 juillet 2013
25 juil. 2013 à 14:02
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 !
0
Rejoignez-nous