使用PHP遍历文件夹与子目录的函数代码


Posted in PHP onSeptember 26, 2011

我们要使用的函数有 Scandir,它的作用是列出指定路径中的文件和目录,就像 Dir 一样。

使用PHP遍历文件夹与子目录的函数代码
> 与更强力的 Glob() 函数,作用是以数组的形式返回与指定模式相匹配的文件名或目录。
> 友情提醒,千万别像小邪那样在电脑前面呆太长时间,否则就会像小邪一样得见鬼的高血糖。

一. 遍历单层文件夹:

> 在扫描单层文件夹的问题是,两个函数的结果虽有不同,不过表现是相差不大的。
> Scandir 函数会提供额外两行,分别是 “.” 和 “..” ,而 Glob 则是没有的。

function get_dir_scandir(){ 
$tree = array(); 
foreach(scandir('./') as $single){ 
echo $single."<br/>\r\n"; 
} 
} 
get_dir_scandir(); function get_dir_glob(){ 
$tree = array(); 
foreach(glob('./*') as $single){ 
echo $single."<br/>\r\n"; 
} 
} 
get_dir_glob();

二. 递归遍历文件树:

> 在递归扫描文件夹树的问题上,还是 Glob 函数的表现好一点,很准确的说。
> Scandir 函数会莫名其妙扫描两次 ../ 处的文件,也就是说如果小邪有俩文件。
> ../b.php 和 ../a.php,结果就会在扫描报告上面出现两次,很是奇怪。

//Update at 2010.07.25 - 以下代码作废 
$path = '..'; 
function get_filetree_scandir($path){ 
$tree = array(); 
foreach(scandir($path) as $single){ 
if(is_dir('../'.$single)){ 
$tree = array_merge($tree,get_filetree($single)); 
} 
else{ 
$tree[] = '../'.$single; 
} 
} 
return $tree; 
} 
print_r(get_filetree_scandir($path)); //Update at 2010.07.25 - 以下为新代码 
$path = './'; 
function get_filetree_scandir($path){ 
$result = array(); 
$temp = array(); 
if (!is_dir($path)||!is_readable($path)) return null; //检测目录有效性 
$allfiles = scandir($path); //获取目录下所有文件与文件夹 
foreach ($allfiles as $filename) { //遍历一遍目录下的文件与文件夹 
if (in_array($filename,array('.','..'))) continue; //无视 . 与 .. 
$fullname = $path.'/'.$filename; //得到完整文件路径 
if (is_dir($fullname)) { //是目录的话继续递归 
$result[$filename] = get_filetree_scandir($fullname); //递归开始 
} 
else { 
$temp[] = $filename; //如果是文件,就存入数组 
} 
} 
foreach ($temp as $tmp) { //把临时数组的内容存入保存结果的数组 
$result[] = $tmp; //这样可以让文件夹排前面,文件在后面 
} 
return $result; 
} 
print_r(get_filetree_scandir($path));

> Glob 函数扫描灰常准确,并且会自动按照字母排好顺序,貌似是最佳方案。
$path = '..'; 
function get_filetree($path){ 
$tree = array(); 
foreach(glob($path.'/*') as $single){ 
if(is_dir($single)){ 
$tree = array_merge($tree,get_filetree($single)); 
} 
else{ 
$tree[] = $single; 
} 
} 
return $tree; 
} 
print_r(get_filetree($path));
PHP 相关文章推荐
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
Apr 28 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
PHP上传图片进行等比缩放可增加水印功能
Jan 13 PHP
PHP中ini_set与ini_get用法实例
Nov 04 PHP
Yii框架获取当前controlle和action对应id的方法
Dec 03 PHP
php字符串函数学习之strstr()
Mar 27 PHP
php开发时容易忘记的一些技术细节
Feb 03 PHP
phpcms的分类名称和类别名称的调用
Jan 05 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
PHP中Trait及其应用详解
Feb 14 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 #PHP
新浪微博API开发简介之用户授权(PHP基础篇)
Sep 25 #PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
Sep 23 #PHP
PHP将DateTime对象转化为友好时间显示的实现代码
Sep 20 #PHP
php方法调用模式与函数调用模式简例
Sep 20 #PHP
php若干单维数组遍历方法的比较
Sep 20 #PHP
PHP学习笔记 用户注册模块用户类以及验证码类
Sep 20 #PHP
You might like
PHP实现无限极分类图文教程
2014/11/25 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP转换文本框内容为HTML格式的方法
2016/07/20 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
jQuery的一些特性和用法整理小结
2010/01/13 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
JS 屏蔽按键效果与改变按键效果的示例代码
2013/12/24 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
vue鼠标移入添加class样式,鼠标移出去除样式(active)实现方法
2018/08/22 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
vue实现页面滚动到底部刷新
2019/08/16 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
盘点提高 Python 代码效率的方法
2014/07/03 Python
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
Python中的匿名函数使用简介
2015/04/27 Python
Django与JS交互的示例代码
2017/08/23 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
python把1变成01的步骤总结
2019/02/27 Python
Python大数据之从网页上爬取数据的方法详解
2019/11/16 Python
使用索引有什么好处
2016/07/27 面试题
给老师的道歉信
2014/01/11 职场文书
怎么写自荐书范文
2014/02/12 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
高中生班主任评语
2014/04/25 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
教师专业自荐信
2014/05/31 职场文书
MySQL之DML语言
2021/04/05 MySQL