PHP使用DirectoryIterator遍历指定目录下的所有文件

作者: 温新

分类: 【PHP基础】

阅读: 2971

时间: 2021-05-23 15:01:46

如果使用PHP遍历一个目录下的所有文件,会怎么做?传统的方法使用opendirreaddir等函数然后进行递归遍历。对于此,PHP有新的方案,那就是DirectoryIterator迭代器

DirectoryIterator迭代器

SPL(标准PHP库)中有一个DirectoryIterator。SPL中最主要的是Iterator迭代器接口,通过这个接口可以使对象用于foreach接口。DirectoryIterator类继承SplFileInfo且实现了IteratorTraversableSeekableIterator

使用它很容易,只需要传递一个目录路径即可,下面通过代码实现。

<span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 26, 26)"><?</span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">php</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 当前文件所有目录</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$path</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(51, 0, 170)">dirname</span>(<span style="box-sizing: border-box;color: rgb(34, 17, 153)">__FILE__</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$dirIterator</span> <span style="box-sizing: border-box;color: rgb(152, 26, 26)">=</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">new</span> <span style="box-sizing: border-box;color: rgb(0, 0, 0)">DirectoryIterator</span>(<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$path</span>);</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(119, 0, 136)">foreach</span> (<span style="box-sizing: border-box;color: rgb(0, 85, 170)">$dirIterator</span> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">as</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$fileinfo</span>) {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 判断是否为目录</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> <span style="box-sizing: border-box;color: rgb(119, 0, 136)">if</span> (<span style="box-sizing: border-box;color: rgb(152, 26, 26)">!</span><span style="box-sizing: border-box;color: rgb(0, 85, 170)">$fileinfo</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">isDir</span>()) {</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(170, 85, 0)">// 输出文件信息</span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">  <span style="box-sizing: border-box;color: rgb(119, 0, 136)">echo</span> <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$fileinfo</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">getFilename</span>() . <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'--'</span> . <span style="box-sizing: border-box;color: rgb(0, 85, 170)">$fileinfo</span><span style="box-sizing: border-box;color: rgb(152, 26, 26)">-></span><span style="box-sizing: border-box;color: rgb(0, 0, 0)">getSize</span>() . <span style="box-sizing: border-box;color: rgb(170, 17, 17)">'<br>'</span>;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"> }</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">}</span>

是不是比递归简单太多了^_^

DirectoryIterator相关方法

DirectoryIterator关于案例可以参数官方介绍,这里简单做个记录。

请登录后再评论