PHP递归遍历指定文件夹内的文件实现方法


Posted in PHP onNovember 15, 2016

今天早上在地铁上看了关于文件和文件夹的一章,正好最近刚搞懂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);
}

以上这篇PHP递归遍历指定文件夹内的文件实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP无敌近乎加密方式!
Jul 17 PHP
PHP 第二节 数据类型之数值型
Apr 28 PHP
PHP多例模式介绍
Jun 24 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 PHP
php对称加密算法示例
May 07 PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 PHP
php保存任意网络图片到服务器的方法
Apr 14 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
php微信公众平台示例代码分析(二)
Dec 06 PHP
Yii redis集合的基本使用教程
Jun 14 PHP
php 判断过去离现在几年的函数(实例代码)
Nov 15 #PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
Nov 15 #PHP
php读取qqwry.dat ip地址定位文件的类实例代码
Nov 15 #PHP
thinkPHP内置字符串截取函数用法详解
Nov 15 #PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 #PHP
php compact 通过变量创建数组
Nov 15 #PHP
PHP多维数组元素操作类的方法
Nov 14 #PHP
You might like
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
PHP基础知识回顾
2012/08/16 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
详解PHP中的 input属性(隐藏 只读 限制)
2017/08/14 PHP
phpstorm 配置xdebug的示例代码
2019/03/31 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
javascript 程序库的比较(一)之DOM功能
2010/04/07 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
2020/05/03 Javascript
python使用arp欺骗伪造网关的方法
2015/04/24 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
Python安装Bs4的多种方法
2020/11/28 Python
CSS3制作ajax loader icon实现思路及代码
2013/08/25 HTML / CSS
New Balance加拿大官方网站:运动鞋和健身服装
2018/11/19 全球购物
电子商务求职信
2014/06/15 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python
Django中的JWT身份验证的实现
2021/05/07 Python
十个Python自动化常用操作,即拿即用
2021/05/10 Python
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL
Redis全局ID生成器的实现
2022/06/05 Redis