【发布时间】:2010-11-08 08:05:43
【问题描述】:
如何使用 PHP 获取目录中的文件名?
我无法使用谷歌找到相关的命令,所以我希望这个问题能帮助那些有类似问题的人。
【问题讨论】:
-
这里有很多问题的重复。
标签: php
如何使用 PHP 获取目录中的文件名?
我无法使用谷歌找到相关的命令,所以我希望这个问题能帮助那些有类似问题的人。
【问题讨论】:
标签: php
有很多方法。较旧的方式是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>';
}
正如 cmets 中提到的,glob 很好,因为我在那里使用的星号实际上可以用来对文件进行匹配,所以glob('*.txt') 会得到文件夹中的所有文本文件,glob('image_*') 会获取所有以 image_ 开头的文件
【讨论】:
glob('*.txt') 将列出所有文本文件。
旧方法是:
<?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 的更好方法。
【讨论】:
Paolo Bergantino's answer 很好,但现在已经过时了!
请考虑以下官方方法来获取目录中的文件。
FilesystemIteratorFilesystemIterator 与其祖先DirectoryIterator 相比具有许多新功能,例如可以避免声明if($file->isDot()) continue;。另见问题Difference between DirectoryIterator and FilesystemIterator。
$it = new FilesystemIterator(__DIR__);
foreach ($it as $fileinfo) {
echo $fileinfo->getFilename() , PHP_EOL;
}
RecursiveDirectoryIterator这个 sn-p 列出所有子目录中的 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。
【讨论】:
我想大多数时候你想跳过. 和..。这是与
递归:
<?php
$o_dir = new RecursiveDirectoryIterator('.', FilesystemIterator::SKIP_DOTS);
$o_iter = new RecursiveIteratorIterator($o_dir);
foreach ($o_iter as $o_name) {
echo $o_name->getFilename();
}
【讨论】: