使用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读写文件的方法(生成HTML)
Nov 27 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
探讨PHP JSON中文乱码的解决方法详解
Jun 06 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
Jul 05 PHP
php获取文件大小的方法
Feb 26 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 PHP
php版交通银行网银支付接口开发入门教程
Sep 26 PHP
PHP+iframe模拟Ajax上传文件功能示例
Jul 02 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
PHP Pipeline 实现中间件的示例代码
Apr 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
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
PHP生成随机密码类分享
2014/06/25 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
php通过分类列表产生分类树数组的方法
2015/04/20 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
jQuery中click事件的定义和用法
2014/12/20 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
js改变embed标签src值的方法
2015/04/10 Javascript
javascript表单验证大全
2015/08/12 Javascript
批量下载对路网图片并生成html的实现方法
2016/06/07 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
js实现倒计时及时间对象
2016/11/15 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
django自带调试服务器的使用详解
2019/08/29 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
预备党员转正考核材料
2014/06/03 职场文书
2015年乡镇妇联工作总结
2015/05/19 职场文书
如何起草一份正确的合伙创业协议书?
2019/07/04 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
Python实战之疫苗研发情况可视化
2021/05/18 Python
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js
Redis实现订单过期删除的方法步骤
2022/06/05 Redis