使用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 相关文章推荐
用cookies来跟踪识别用户
Oct 09 PHP
PHP产生随机字符串函数
Dec 06 PHP
php将数据库中所有内容生成静态html文档的代码
Apr 12 PHP
PHP filter_var() 函数 Filter 函数
Apr 25 PHP
ThinkPHP的Widget扩展实例
Jun 19 PHP
PHP框架Laravel的小技巧两则
Feb 10 PHP
php开发中的页面跳转方法总结
Apr 26 PHP
浅谈php的优缺点
Jul 14 PHP
PHP实现简单的模板引擎功能示例
Sep 02 PHP
php框架CodeIgniter使用redis的方法分析
Apr 13 PHP
php微信开发之音乐回复功能
Jun 14 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 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
php上传文件并存储到mysql数据库的方法
2015/03/16 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
Yii2 rbac权限控制之rule教程详解
2016/06/23 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
php微信开发之谷歌测距
2018/06/14 PHP
js实现页面打印功能实例代码(附去页眉页脚功能代码)
2009/12/15 Javascript
php对mongodb的扩展(初识如故)
2012/11/11 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
JS/jQuery判断DOM节点是否存在的简单方法
2016/11/24 Javascript
jQuery上传插件webupload使用方法
2017/08/01 jQuery
ES6中Array.copyWithin()函数的用法实例详解
2017/09/16 Javascript
详解Node 定时器
2018/02/26 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
layer.open回调获取弹出层参数的实现方法
2019/09/10 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
解决vux 中popup 组件Mask 遮罩在最上层的问题
2020/11/03 Javascript
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
跟老齐学Python之集合(set)
2014/09/24 Python
举例讲解Python中的Null模式与桥接模式编程
2016/02/02 Python
Python 判断奇数偶数的方法
2018/12/20 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
迟到检讨书300字
2014/02/14 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
保安辞职信范文
2015/02/28 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
新手必备Python开发环境搭建教程
2021/05/28 Python
Django+Celery实现定时任务的示例
2021/06/23 Python