使用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 相关文章推荐
一个程序下载的管理程序(一)
Oct 09 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
PHP内核介绍及扩展开发指南―基础知识
Sep 11 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
PHP获取数组中重复最多的元素的实现方法
Nov 11 PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 PHP
Zend Framework分页类用法详解
Mar 22 PHP
thinkphp自带验证码全面解析
Sep 18 PHP
php版微信公众号自定义分享内容实现方法
Sep 22 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
Mar 28 PHP
Laravel统一错误处理为JSON的方法介绍
Oct 18 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
获得Google PR值的PHP代码
2007/01/28 PHP
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
PHP二维数组的去重问题解析
2011/07/17 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
PHP捕获Fatal error错误的方法
2014/06/11 PHP
基于CakePHP实现的简单博客系统实例
2015/06/28 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
Div Select挡住的解决办法
2008/08/07 Javascript
关于Javascript与iframe的那些事儿
2013/07/04 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
WebSocket+node.js创建即时通信的Web聊天服务器
2016/08/08 Javascript
Three.js基础部分学习
2017/01/08 Javascript
js 获取图像缩放后的实际宽高,位置等信息
2017/03/07 Javascript
jQuery插件之validation插件
2017/03/29 jQuery
vue项目中使用axios上传图片等文件操作
2017/11/02 Javascript
JS实现简易换图时钟功能分析
2018/01/04 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
Angular ElementRef简介及其使用
2018/10/01 Javascript
通过js实现压缩图片上传功能
2020/02/25 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
python实现socket端口重定向示例
2014/02/10 Python
Python使用Redis实现作业调度系统(超简单)
2016/03/22 Python
Python实现的双色球生成功能示例
2017/12/18 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
python实现计数排序与桶排序实例代码
2019/03/28 Python
2014年党员公开承诺书范文
2014/03/28 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
2014年乡镇工作总结
2014/11/21 职场文书
2016年五一劳动节专题校园广播稿
2015/12/17 职场文书