最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • PHP获取目录中的全部内容RecursiveDirectoryIterator

    正文概述 转载于:掘金(硬核项目经理)   2021-03-31   763

    这次我们来介绍一个SPL库中的目录迭代器,它的作用其实非常简单,从名字就可以看出来,就是获取指定目录下的所有内容。之前我们要遍历目录获取目录及目录下的所有文件一般是需要进行递归遍历的,自己写这个代码说实话还是挺麻烦的,所以php为我们准备好了这一套内置API,当输入指定的目录后,直接返回该目录下所有子目录及文件内容。当然,并不是树型的,顺序并不一定,想要组织成树型还需要我们自己再进行处理。

    话不多说,直接看代码:

    $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文件,并且计算他们的文件总大小呢?使用这一套迭代器操作也可以非常简单的完成,我们只需要增加一个正则迭代器对前面的迭代器内容进行一下过滤就好了:

    // 获取所有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库中还有许多值得我们探索的能力,慢慢学习慢慢实践,不断提升我们面向优雅编程的能力。

    测试代码: github.com/zhangyue050…

    参考文档: 《PHP7编程实战》 www.php.net/manual/en/c… www.php.net/manual/en/c…


    起源地下载网 » PHP获取目录中的全部内容RecursiveDirectoryIterator

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元