使用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 相关文章推荐
实例(Smarty+FCKeditor新闻系统)
Jan 02 PHP
PHP 实例化类的一点摘记
Mar 23 PHP
php中利用post传递字符串重定向的实现代码
Apr 21 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
PHP安全配置详细说明
Sep 26 PHP
php 注册时输入信息验证器的实现详解
Jul 05 PHP
让codeigniter与swfupload整合的最佳解决方案
Jun 12 PHP
PHP经典面试题之设计模式(经常遇到)
Oct 15 PHP
php实现图片缩略图的方法
Mar 29 PHP
PHP微信公众号自动发送红包API
Jun 01 PHP
PHP bin2hex()函数基础实例讲解
Feb 11 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 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介绍篇
2010/10/26 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
2012/09/05 PHP
ajax php传递和接收变量实现思路及代码
2012/12/19 PHP
php简单的留言板与回复功能具体实现
2014/02/19 PHP
php中cookie的使用方法
2014/03/29 PHP
PHP一个简单的无需刷新爬虫
2019/01/05 PHP
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
2009/11/30 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
2013/03/18 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
jquery中ajax使用error调试错误的方法
2015/02/08 Javascript
JS实现窗口加载时模拟鼠标移动的方法
2015/06/03 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
python字典键值对的添加和遍历方法
2016/09/11 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
Python中zip函数如何使用
2020/06/04 Python
小程序瀑布流解决左右两边高度差距过大的问题
2019/02/20 HTML / CSS
幼儿园秋游活动方案
2014/01/21 职场文书
师范教师专业大学生职业生涯规划范文
2014/03/02 职场文书
学习型党组织建设经验材料
2014/05/26 职场文书
上课不认真检讨书
2014/09/17 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
校友回访母校寄语
2015/02/26 职场文书
2016猴年开门红标语口号
2015/12/26 职场文书