Pao*_*ino 77
有很多方法.较老的方法是scandir,但 DirectoryIterator可能是最好的办法.
以下是如何使用每个打印当前目录中的所有文件的一些示例:
DirectoryIterator 用法:(推荐)foreach (new DirectoryIterator('.') as $file) {
if($file->isDot()) continue;
print $file->getFilename() . '<br>';
}
Run Code Online (Sandbox Code Playgroud)
scandir 用法:$files = scandir('.');
foreach($files as $file) {
if($file == '.' || $file == '..') continue;
print $file . '<br>';
}
Run Code Online (Sandbox Code Playgroud)
opendir和readdir用法:if ($handle = opendir('.')) {
while (false !== ($file = readdir($handle))) {
if($file == '.' || $file == '..') continue;
print $file . '<br>';
}
closedir($handle);
}
Run Code Online (Sandbox Code Playgroud)
glob 用法:foreach (glob("*") as $file) {
if($file == '.' || $file == '..') continue;
print $file . '<br>';
}
Run Code Online (Sandbox Code Playgroud)
正如评论中所提到的那样,glob很好,因为我在那里使用的星号实际上可以用来对文件进行匹配,所以glob('*.txt')会得到文件夹中的所有文本文件,并且glob('image_*')会得到所有以image_开头的文件
在保罗Bergantino的答案是罚款,但现在已经过时!
请考虑以下官方方法将文件放入目录中.
FilesystemIteratorFilesystemIterator与其祖先相比具有许多新功能DirectoryIterator,例如避免声明的可能性if($file->isDot()) continue;.另见问题与DirectoryIterator和之间FilesystemIterator的区别.
$it = new FilesystemIterator(__DIR__);
foreach ($it as $fileinfo) {
echo $fileinfo->getFilename() , PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)
RecursiveDirectoryIterator此代码段列出了所有子目录中的PHP文件.
$dir = new RecursiveDirectoryIterator(__DIR__);
$flat = new RecursiveIteratorIterator($dir);
$files = new RegexIterator($flat, '/\.php$/i');
foreach($files as $file) {
echo $file , PHP_EOL;
}
Run Code Online (Sandbox Code Playgroud)
另见Wrikken的答案.