话不多说,直接看代码:
$path=$argv[1];//获取目录下所有内容$dirs=newRecursiveIteratorIterator(newRecursiveDirectoryIterator($path),RecursiveIteratorIterator::SELF_FIRST);foreach($dirsas$k=>$d){echo'key:'.$k,PHP_EOL;if($d->isDir()){echo$d->getPathname(),PHP_EOL;}else{echo$d->getFilename(),PHP_EOL;}}//实行phpPHP获取目录中的全部内容RecursiveDirectoryIterator.php..///key:.././/.././/key:../..//../..//key:../source//../source//key:../source/.//../source/.//key:../source/..//../source/..//key:../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php//PHP获取目录中的全部内容RecursiveDirectoryIterator.php//key:../source/PHP大文件读取操作.php//PHP大文件读取操作.php//key:../PHP大文件读取操作.md//PHP大文件读取操作.md//key:../PHP获取目录中的全部内容RecursiveDirectoryIterator.md//PHP获取目录中的全部内容RecursiveDirectoryIterator.md
实在就一行代码,然后直接循环输出这个迭代器。从结果中我们可以看出,前辈入 source 目录遍历完成后再遍历外部的文件内容,按照目录、文件名的顺序依次获取了目录下的所有内容。是不是比我们自己写递归函数要方便很多。
如果我们想获取目录下的所有PHP文件,并且打算他们的文件总大小呢?利用这一套迭代器操作也可以非常大略的完成,我们只须要增加一个正则迭代器对前面的迭代器内容进行一下过滤就好了:

//获取所有php文件$regIts=newRegexIterator($dirs,'/^.+\.php$/i');$fileSize=0;foreach($regItsas$k=>$p){echo$p->getSize().''.$k,PHP_EOL;$fileSize+=$p->getSize();}echo'Total',$fileSize,PHP_EOL;//622../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php//869../source/PHP大文件读取操作.php//Total1491
觉得就和 ls -l 一样,可以方便的让我们能够进行目录下的干系操作。这个类的利用就大略的先容到这里,关于SPL库中还有许多值得我们探索的能力,逐步学习逐步实践,不断提升我们面向优雅编程的能力。
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/PHP%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%85%A8%E9%83%A8%E5%86%85%E5%AE%B9RecursiveDirectoryIterator.php
参考文档: 《PHP7编程实战》
https://www.php.net/manual/en/class.recursivedirectoryiterator.php
https://www.php.net/manual/en/class.splfileinfo.php