Как получить имена файлов внутри каталога с помощью 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.