• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP获取目录中的全部内容RecursiveDirectoryIterator

php 搞代码 3年前 (2022-02-28) 21次浏览 已收录 0个评论

这次咱们来介绍一个SPL库中的目录迭代器,它的作用其实非常简单,从名字就可以看进去,就是获取指定目录下的所有内容。之前咱们要遍历目录获取目录及目录下的所有文件个别是须要进行递归遍历的,本人写这个代码说实话还是挺麻烦的,所以PHP为咱们筹备好了这一套内置API,当输出指定的目录后,间接返回该目录下所有子目录及文件内容。当然,并不是树型的,程序并不一定,想要组织成树型还须要咱们本人再进行解决。

话不多说,间接看代码:

<code class="php">$path = $argv[1];

// 获取目录下所有内容
$dirs = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);

foreach($dirs as $k=>$d){
    echo 'key:'. $k, PHP_EOL;
    if($d->isDir()){
        echo $d->getPathname(), PHP_EOL;
    }else{
        echo $d->getFilename(), PHP_EOL;
    }
}

//执行 php PHP获取目录中的全部内容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文件,并且计算他们的文件总大小呢?应用这一套迭代器操作也能够非常简单的实现,咱们只须要减少一个正则迭代器对后面的迭代器内容进行一下过滤就好了:

<code class="php">// 获取所有php文件
$regIts = new RegexIterator($dirs, '/^.+\.php$/i');
$fileSize = 0;
foreach($regIts as $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
// Total 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

参考文档:
《PHP7编程实战》
https://www.php.net/manual/en/class.recursivedirectoryiterator.php
https://www.php.net/manual/en/class.splfileinfo.php

===========

各自媒体平台均可搜寻【硬核项目经理】


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP获取目录中的全部内容RecursiveDirectoryIterator

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址