牛骨文教育服务平台(让学习变的简单)
博文笔记

PHP递归遍历指定文件夹内的文件

创建时间:2016-03-28 投稿人: 浏览次数:1495

今天早上在地铁上看了关于文件和文件夹的一章,正好最近刚搞懂linux的文件系统,觉得对文件属性的访问跟Shell命令很像,所以想晚上来实践一下。

发现php的文件夹函数好像没有提供遍历文件夹下的所有文件(包括子目录中的文件),于是,就想自己实现一个。

在写的时候发现一些操作文件夹的函数并不是自己想的那样。比如,dirname()根据提供的完整文件路径来取得文件所在的文件夹的路径,但如果你传入的是文件夹,它取的就是它的父文件夹。这点要明白。basename()也是同样的道理,传入文件夹路径取得就是文件夹的名字。这两个函数返回的结果结尾都不加’/’

<?php
$dirPath="/home/WWW/Test";//目录,结尾不加’/‘

//执行遍历
recursion_readdir($dirPath);

/**
*@summary 重复times次字符char
*@param $char 需要重复的字符
*@param $times 重复次数
*@return 返回重复字符组成的字符串
*/
function forChar($char="-",$times=0){
    $result="";
    for($i=0;$i<$times;$i++){
        $result.=$char;
    }
    return $result;
}

/**
*@summary   递归读取目录
*@param $dirPath 目录
*@param $Deep=0 深度,用于缩进,无需手动设置
*@return 无
*/
function recursion_readdir($dirPath,$Deep=0){
  $resDir=opendir($dirPath);
  while($basename=readdir($resDir)){
      //当前文件路径
      $path=$dirPath."/".$basename;
      if(is_dir($path) AND $basename!="." AND $basename!=".."){
        //是目录,打印目录名,继续迭代
        echo forChar("-",$Deep).$basename."/<br/>";
        $Deep++;//深度+1
        recursion_readdir($path,$Deep);
      }else if(basename($path)!="." AND basename($path)!=".."){
          //不是文件夹,打印文件名
          echo forChar("-",$Deep).basename($path)."<br/>";
      }

  }
  closedir($resDir);
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。