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