2010-11-16 5 views
5

Podobno mamy folder /images/, ma on kilka plików w środku.Jak uzyskać nazwy plików?

i skrypt /scripts/listing.php

Jak możemy uzyskać nazwy wszystkich plików wewnątrz folderu /images/ w listing.php?

Dzięki.

Odpowiedz

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); 
} 
?> 

Patrz: readdir()

2

Korzystanie albo scandir lub dir sprawia, że ​​ten problem trywialny. Aby uzyskać wszystkie pliki w katalogu z wyjątkiem szczególnych plików . i .. w tablicy o indeksach począwszy od 0 można połączyć scandir z array_diff i array_merge:

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

Oto metoda przy użyciu klasy SPL DirectoryIterator:

<?php 

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

?> 
3

Nawet łatwiej niż readdir(), należy użyć glob:

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

Więcej informacji na temat glob

+1

Zbyt dużo narzutów z globem – RobertPitt

1

tylko rozszerzenie na post Enrico, tam również niektóre kontrole/modyfikacje, które musisz zrobić.

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; 
    } 
} 

A Wykorzystanie tak:

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

To będzie Ci listę tak:

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

hoep to pomaga.

+1

Dlaczego nie skorzystać z wbudowanego narzędzia RecursiveDirectoryIterator/DirectoryIterator ...? – ircmaxell

+0

Wierzcie lub nie, ale niektórzy ludzie nadal używają PHP4.x – RobertPitt