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

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

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

Есть много способов. Более старый способ – 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_*') , вы получите все файлы, которые начинаются с image_

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


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 .

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

 <?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.