获取目录中的文件

php
2022-08-30 09:44:55

如何使用PHP获取目录中的文件名?

我无法使用Google找到相关的命令,所以我希望这个问题能帮助那些沿着类似路线提问的人。


答案 1

有很多方法。较旧的方法是scandir,D 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>';
}

正如评论中提到的,这很好,因为我在那里使用的星号实际上可以用来对文件进行匹配,所以会得到文件夹中的所有文本文件,并会得到所有以image_globglob('*.txt')glob('image_*')


答案 2

保罗·贝尔甘蒂诺的回答很好,但现在已经过时了!
请考虑以下官方方法来获取目录中的文件。


FilesystemIterator

FilesystemIterator与其祖先相比,具有许多新功能,例如避免语句的可能性。另请参阅问题 DirectoryIteratorFilesystemIterator 之间的区别DirectoryIteratorif($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的答案


推荐