Как получить имена файлов внутри каталога с помощью PHP?
Я не смог найти соответствующую команду с помощью Google, поэтому я надеюсь, что этот вопрос поможет тем, кто задает подобные строки.
Как получить имена файлов внутри каталога с помощью 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_*')
будет получите все файлы, начинающиеся с изображения _
Ответ Паоло Бергантино был прекрасен, но теперь устарел!
Пожалуйста, рассмотрите следующие официальные способы получения файлов внутри каталога.
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.