如何使用PHP获取目录中的文件名?
我找不到使用Google的相关命令,所以我希望这个问题可以帮助那些提出类似问题的人。
答案 0 :(得分:77)
有很多方法。较早的方法是scandir
,但DirectoryIterator
可能是最好的方法。
以下是一些有关如何使用每个文件打印当前目录中所有文件的示例:
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 _
答案 1 :(得分:7)
Paolo Bergantino's answer很好,但现在已经过时了! 请考虑以下官方方法将文件放入目录。
FilesystemIterator
FilesystemIterator
相比, DirectoryIterator
有许多新功能,例如避免语句if($file->isDot()) continue;
的可能性。另请参阅问题Difference between DirectoryIterator
and 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's answer。
答案 2 :(得分:0)
旧的方式是:
<?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的更好方法。
答案 3 :(得分:0)
我想大多数时候您想跳过.
和..
。这就是
递归:
<?php
$o_dir = new RecursiveDirectoryIterator('.', FilesystemIterator::SKIP_DOTS);
$o_iter = new RecursiveIteratorIterator($o_dir);
foreach ($o_iter as $o_name) {
echo $o_name->getFilename();
}