使用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速度快类库
Mar 18 PHP
PHPLog php 程序调试追踪工具
Sep 09 PHP
PHP采集相关教程之一 CURL函数库
Feb 15 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
php实现以只读方式打开文件的方法
Mar 16 PHP
php中 $$str 中 &quot;$$&quot; 的详解
Jul 06 PHP
php函数连续调用实例分析
Jul 30 PHP
3种php生成唯一id的方法
Nov 23 PHP
php生成图片缩略图功能示例
Feb 22 PHP
laravel5.4生成验证码的实例讲解
Aug 05 PHP
使用Zookeeper分布式部署PHP应用程序
Mar 15 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在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
深入理解PHP中的Session和Cookie
2013/06/21 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
Jquery 表格合并的问题分享
2011/09/17 Javascript
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
JavaScript运动框架 解决速度正负取整问题(一)
2017/05/17 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
NodeJs入门教程之定时器和队列
2019/03/08 NodeJs
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
python对数组进行反转的方法
2015/05/20 Python
Python中http请求方法库汇总
2016/01/06 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
Python给定一个句子倒序输出单词以及字母的方法
2018/12/20 Python
对python numpy.array插入一行或一列的方法详解
2019/01/29 Python
Django重设Admin密码过程解析
2020/02/10 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
介绍一下SQL Server的全文索引
2013/08/15 面试题
感恩老师的演讲稿
2014/05/06 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
2014年党员整改措施
2014/10/24 职场文书