使用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 相关文章推荐
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 PHP
php下使用strpos需要注意 === 运算符
Jul 17 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
ThinkPHP连接数据库及主从数据库的设置教程
Aug 22 PHP
php利用cookie实现自动登录的方法
Dec 10 PHP
PHP数组操作――获取数组最后一个值的方法
Apr 14 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
如何使用PHP对网站验证码进行破解
Sep 17 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
Yii2实现让关联字段支持搜索功能的方法
Aug 10 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
php微信支付之公众号支付功能
May 30 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 n个不重复的随机数生成代码
2009/06/23 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
javascript学习笔记(十三) js闭包介绍(转)
2012/06/20 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
Angularjs实现多个页面共享数据的方式
2016/03/29 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
详解vue+css3做交互特效的方法
2017/11/20 Javascript
使用ajax的post同步执行(实现方法)
2017/12/21 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
微信小程序 scroll-view的使用案例代码详解
2020/06/11 Javascript
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
django实现分页的方法
2015/05/26 Python
Python 的描述符 descriptor详解
2016/02/27 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
python 实现dict转json并保存文件
2019/12/05 Python
win7上tensorflow2.2.0安装成功 引用DLL load failed时找不到指定模块 tensorflow has no attribute xxx 解决方法
2020/05/20 Python
django中嵌套的try-except实例
2020/05/21 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
Collection和Collections的区别
2016/05/02 面试题
淘宝店铺营销方案
2014/02/13 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
CSS实现九宫格布局(自适应)的示例代码
2022/02/12 HTML / CSS
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
Python获取字典中某个key的value
2022/04/13 Python