PHP使用DirectoryIterator遍历指定目录下的所有文件
如果使用PHP遍历一个目录下的所有文件,会怎么做?传统的方法使用opendir
、readdir
等函数然后进行递归遍历。对于此,PHP有新的方案,那就是DirectoryIterator迭代器
。
DirectoryIterator迭代器
SPL(标准PHP库)
中有一个DirectoryIterator
。SPL中最主要的是Iterator
迭代器接口,通过这个接口可以使对象用于foreach
接口。DirectoryIterator
类继承SplFileInfo
且实现了Iterator
、Traversable
、SeekableIterator
。
使用它很容易,只需要传递一个目录路径即可,下面通过代码实现。
<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关于案例可以参数官方介绍,这里简单做个记录。
请登录后再评论