2010-11-16 16 views
5

Comme, nous avons le dossier /images/, il a quelques fichiers à l'intérieur.Comment obtenir les noms de fichiers?

Et le script /scripts/listing.php

Comment pouvons-nous obtenir les noms des tous les fichiers dans le dossier /images/, dans listing.php?

Merci.

Répondre

8
<?php 

if ($handle = opendir('/path/to/files')) { 
    echo "Directory handle: $handle\n"; 
    echo "Files:\n"; 

    /* This is the correct way to loop over the directory. */ 
    while (false !== ($file = readdir($handle))) { 
     echo "$file\n"; 
    } 

    /* This is the WRONG way to loop over the directory. */ 
    while ($file = readdir($handle)) { 
     echo "$file\n"; 
    } 

    closedir($handle); 
} 
?> 

Voir: readdir()

2

En utilisant soit scandir ou dir fait ce problème trivial. Pour obtenir tous les fichiers dans un répertoire à l'exception des fichiers spéciaux . et .. dans un tableau avec des indices à partir de 0, on peut combiner scandir avec array_diff et array_merge:

$files = array_merge(array_diff(scandir($dir), Array('.','..'))); 
// $files now contains the filenames of every file in the directory $dir 
2

Voici une méthode utilisant la classe SPL DirectoryIterator:

<?php 

foreach (new DirectoryIterator('../images') as $fileInfo) 
{ 
    if($fileInfo->isDot()) continue; 
    echo $fileInfo->getFilename() . "<br>\n"; 
} 

?> 
3

encore plus facile que readdir(), utilisez glob:

$files = glob('/path/to/files/*'); 

plus d'infos sur glob

+1

Trop de frais généraux avec glob – RobertPitt

1

juste en prolongation sur la poste d'Enrico, il y a aussi quelques vérifications/modifications que vous devez faire.

class Directory 
{ 
    private $path; 
    public function __construct($path) 
    { 
     $path = $path; 
    } 

    public function getFiles($recursive = false,$subpath = false) 
    { 
     $files = array(); 
     $path = $subpath ? $subpath : $this->path; 

     if(false != ($handle = opendir($path)) 
     { 
      while (false !== ($file = readdir($handle))) 
      { 
       if($recursive && is_dir($file) && $file != '.' && $file != '..') 
       { 
        array_merge($files,$this->getFiles(true,$file)); 
       }else 
       { 
        $files[] = $path . $file; 
       } 
      } 
     } 
     return $files; 
    } 
} 

Et l'utilisation comme ceci:

<?php 
$directory = new Directory("/"); 
$Files = $directory->getFiles(true); 
?> 

Cela vous obtiendrez une liste comme ceci:

/index.php 
/includes/functions.php 
/includes/.htaccess 
//... 

PHEO cette aide.

+1

Pourquoi ne pas simplement utiliser le RecursiveDirectoryIterator/DirectoryIterator intégré ...? – ircmaxell

+0

Croyez-le ou non, mais certaines personnes utilisent encore PHP4.x – RobertPitt

Questions connexes