PHP使用DirectoryIterator遍历指定目录下的所有文件
如果使用PHP遍历一个目录下的所有文件,会怎么做?传统的方法使用opendir、readdir等函数然后进行递归遍历。对于此,PHP有新的方案,那就是DirectoryIterator迭代器。
DirectoryIterator迭代器
SPL(标准PHP库)中有一个DirectoryIterator。SPL中最主要的是Iterator迭代器接口,通过这个接口可以使对象用于foreach接口。DirectoryIterator类继承SplFileInfo且实现了Iterator、Traversable、SeekableIterator。
使用它很容易,只需要传递一个目录路径即可,下面通过代码实现。
<?php
// 当前文件所有目录
$path = dirname(__FILE__);
$dirIterator = new DirectoryIterator($path);
foreach ($dirIterator as $fileinfo) {
// 判断是否为目录
if (!$fileinfo->isDir()) {
// 输出文件信息
echo $fileinfo->getFilename() . '--' . $fileinfo->getSize() . '<br>';
}
}
是不是比递归简单太多了^_^
DirectoryIterator相关方法
DirectoryIterator关于案例可以参数官方介绍,这里简单做个记录。
| 方法名 | 说明 |
|---|---|
| isDir() | 判断当前DirectoryIterator item对象是否为目录 |
| isDot() | 判断当前DirectoryIterator item对象是否为 '.' 或 '..' |
| isFile() | 判断当前DirectoryIterator item对象是否为有效文件 |
| isLink() | 判断当前DirectoryIterator item对象是否为链接 |
| isReadable() | 判断当前DirectoryIterator item对象是否可读 |
| isWritable() | 判断当前DirectoryIterator item对象是否可写 |
| isExecutable() | 判断当前DirectoryIterator item对象是否可执行 |
| getATime() | 获取当前DirectoryIterator item最后访问时间 |
| getCTime() | 获取当前DirectoryIterator item最后修改时间 |
| getMTime() | 获取当前DirectoryIterator item文件数据块最后写入时间 |
| getBasename() | 获取当前DirectoryIterator item名称 |
| getFilename() | 获取当前DirectoryIterator item文件名(含扩展名) |
| getPathname() | 获取当前DirectoryIterator item路径名 |
| getPath() | 获取当前DirectoryIterator item路径名与文件名 |
| getSize() | 获取当前DirectoryIterator item大小 |
| getType() | 获取当前DirectoryIterator item类型 |
2020-05-24
请登录后再评论