本次介绍SPL库中的目录迭代器。它的功能其实很简单。看名字就知道,就是获取指定目录下的所有内容。以前,我们必须遍历目录才能获取目录和目录下的所有文件。一般需要递归遍历。说实话,自己写这段代码还是挺麻烦的,所以PHP为我们准备了一套内置的API。当进入指定目录后,直接返回该目录下的所有子目录和文件内容。当然不是树型,顺序也不确定。如果我们要把它整理成树型,就需要自己处理。话不多说,直接看代码:$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:../..//../..//键:../source//../source//键:../source/.//../source/.//键:../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其实就是一行代码,然后直接循环输出这个迭代器。从结果中我们可以看出,进入源码目录并遍历外部文件内容后,按照目录和文件名的先后顺序,依次获取了该目录的所有内容。是不是比自己写递归函数方便多了?如果我们想获取一个目录下的所有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//总计1491感觉和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参考文档:♂https://www.php.net/manual/en/class.recursivedirectoryiterator.phphttps://www.php.net/manual/en/class.splfileinfo.php===========各媒体平台均可搜索【硬核】专案经理】
