使用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 相关文章推荐
模拟SQLSERVER的两个函数:dateadd(),datediff()
Oct 09 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
php设计模式 Observer(观察者模式)
Jun 26 PHP
PHP中PDO的错误处理
Sep 04 PHP
PHP中的正则表达式函数介绍
Feb 27 PHP
PHP中extract()函数的定义和用法
Aug 17 PHP
php导入导出excel实例
Oct 25 PHP
php cookie使用方法学习笔记分享
Nov 07 PHP
php stripslashes和addslashes的区别
Feb 03 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
PHP时间处理类操作示例
Sep 05 PHP
PHP7 错误处理机制修改
Mar 09 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
mysql时区问题
2008/03/26 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
Extjs EditorGridPanel中ComboBox列的显示问题
2011/07/04 Javascript
判断ie的两种简单方法
2013/08/12 Javascript
JS+CSS实现带有碰撞缓冲效果的竖向导航条代码
2015/09/15 Javascript
js实现StringBuffer的简单实例
2016/09/02 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
Bootstrap基本插件学习笔记之Tooltip提示工具(18)
2016/12/08 Javascript
angular分页指令操作
2017/01/09 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
详解javascript appendChild()的完整功能
2018/08/18 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
AjaxFileUpload.js实现异步上传文件功能
2019/04/19 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
typescript配置alias的详细步骤
2020/08/12 Javascript
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
[01:04:05]VG vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python爬虫使用cookie登录详解
2017/12/27 Python
Python数据集切分实例
2018/12/08 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
2019/03/05 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
美国内衣第一品牌:Hanes(恒适)
2016/07/29 全球购物
国际象棋商店:The Chess Store
2018/07/09 全球购物
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
酒店管理专业学生求职信
2013/09/27 职场文书
财务主管自我鉴定
2014/01/17 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
环保倡议书100字
2014/05/15 职场文书
企业环保标语
2014/06/10 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
《火烧云》教学反思
2016/02/23 职场文书
如何Tomcat中使用ipv6地址
2022/05/06 Servers