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
请登录后再评论