获取目录中的文件
2022-08-30 09:44:55
如何使用PHP获取目录中的文件名?
我无法使用Google找到相关的命令,所以我希望这个问题能帮助那些沿着类似路线提问的人。
有很多方法。较旧的方法是scandir,
但D 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>';
}
正如评论中提到的,这很好,因为我在那里使用的星号实际上可以用来对文件进行匹配,所以会得到文件夹中的所有文本文件,并会得到所有以image_glob
glob('*.txt')
glob('image_*')
保罗·贝尔甘蒂诺的回答很好,但现在已经过时了!
请考虑以下官方方法来获取目录中的文件。
FilesystemIterator
FilesystemIterator
与其祖先相比,具有许多新功能,例如避免语句的可能性。另请参阅问题 DirectoryIterator
和 FilesystemIterator
之间的区别。DirectoryIterator
if($file->isDot()) continue;
$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的答案。