获取目录中的文件

时间:2009-07-06 09:02:06

标签: php

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

我找不到使用Google的相关命令,所以我希望这个问题可以帮助那些提出类似问题的人。

4 个答案:

答案 0 :(得分:77)

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

opendirreaddir用法:

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();
}

https://php.net/class.recursivedirectoryiterator