Получить файлы внутри каталога

Как получить имена файлов внутри каталога с помощью PHP?

Я не смог найти соответствующую команду с помощью Google, поэтому я надеюсь, что этот вопрос поможет тем, кто задает подобные строки.

Ответ 1

Там много способов. Более старый способ scandir, но DirectoryIterator вероятно, лучший способ.

Там также readdir (для использования с opendir) и glob.

Вот несколько примеров использования каждого из них для печати всех файлов в текущем каталоге:

DirectoryIterator использование: (рекомендуется)

foreach (new DirectoryIterator('.') as $file) {
    if($file->isDot()) continue;
    print $file->getFilename() . '<br>';
}

scandir использование:

$files = scandir('.');
foreach($files as $file) {
    if($file == '.' || $file == '..') continue;
    print $file . '<br>';
}

opendir и readdir использование:

if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if($file == '.' || $file == '..') continue;
        print $file . '<br>';
    }
    closedir($handle);
}

glob использование:

foreach (glob("*") as $file) {
    if($file == '.' || $file == '..') continue;
    print $file . '<br>';
}

Как уже упоминалось в комментариях, glob хорошо, потому что используемая там звездочка действительно может использоваться для выполнения совпадений в файлах, поэтому glob('*.txt') доставит вам все текстовые файлы в папке и glob('image_*') будет получите все файлы, начинающиеся с изображения _

Ответ 2

Ответ Паоло Бергантино был прекрасен, но теперь устарел!
Пожалуйста, рассмотрите следующие официальные способы получения файлов внутри каталога.


FilesystemIterator

FilesystemIterator имеет много новых функций по сравнению с его предком DirectoryIterator, как, например, возможность избежать утверждения if($file->isDot()) continue;. См. Также вопрос Разница между DirectoryIterator и FilesystemIterator.

$it = new FilesystemIterator(__DIR__);
foreach ($it as $fileinfo) {
    echo $fileinfo->getFilename() , PHP_EOL;
}

RecursiveDirectoryIterator

Этот фрагмент отображает файлы PHP во всех подкаталогах.

$dir   = new RecursiveDirectoryIterator(__DIR__);
$flat  = new RecursiveIteratorIterator($dir);
$files = new RegexIterator($flat, '/\.php$/i');
foreach($files as $file) {
    echo $file , PHP_EOL;
}

См. также ответ Wrikken.

Ответ 3

Старый способ:

<?php
    $path = realpath('.'); // put in your path here
    $dir_handle = @opendir($path) or die("Unable to open $path");
    $directories = array();
    while ($file = readdir($dir_handle)) 
        $directories[] = $file;
    closedir($dir_handle);
?>

Как уже упоминалось, итератор каталогов может быть лучшим способом для PHP 5.