使用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 相关文章推荐
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
php实现的双向队列类实例
Sep 24 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
thinkPHP实现瀑布流的方法
Nov 29 PHP
php通过ksort()函数给关联数组按照键排序的方法
Mar 18 PHP
PHP中余数、取余的妙用
Jun 29 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
Dec 25 PHP
PHP SFTP实现上传下载功能
Jul 26 PHP
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
May 24 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
Feb 15 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
May 26 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 mysql数据库操作分页类
2008/06/04 PHP
ThinkPHP3.1基础知识快速入门
2014/06/19 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
Yii使用smsto短信接口的函数demo示例
2016/07/13 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
javascript 图片上一张下一张链接效果代码
2010/03/12 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
JavaScript检查弹出窗口是否被阻拦的方法技巧
2015/03/13 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
2016/06/20 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python自动化测试之setUp与tearDown实例
2014/09/28 Python
python中使用序列的方法
2015/08/03 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
python scrapy重复执行实现代码详解
2019/12/28 Python
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
大学生实习鉴定评语
2014/04/25 职场文书
中药学专业毕业生推荐信
2014/07/10 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
2015年党员承诺书
2015/01/21 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
如何书写先进事迹材料?
2019/07/02 职场文书
详解运行Python的神器Jupyter Notebook
2021/06/03 Python