使用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计划任务之关闭浏览器后仍然继续执行的函数
Jul 22 PHP
php 归并排序 数组交集
May 10 PHP
PHP取得一个类的属性和方法的实现代码
May 22 PHP
php简单的会话类代码
Aug 08 PHP
使用PHP求两个文件的相对路径
Jun 20 PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 PHP
php计算程序运行时间的简单例子分享
May 10 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
php实现计数器方法小结
Jan 05 PHP
PHP正则获取页面所有图片地址
Mar 23 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
Feb 06 PHP
laravel实现上传图片的两种方式小结
Oct 12 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&amp;mysql(二)
2006/10/09 PHP
php中批量删除Mysql中相同前缀的数据表的代码
2011/07/01 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
php实现文章置顶功能的方法
2016/10/20 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
让Firefox支持event对象实现代码
2009/11/07 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
深入理解JavaScript系列(46):代码复用模式(推荐篇)详解
2015/03/04 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
详解nodejs爬虫程序解决gbk等中文编码问题
2017/04/06 NodeJs
jQuery实现简单的手风琴效果
2020/04/17 jQuery
ES6中新增的Object.assign()方法详解
2017/09/22 Javascript
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
Python求解平方根的方法
2015/03/11 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
python 按照固定长度分割字符串的方法小结
2018/04/30 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
2019/03/01 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
英国现代绅士品牌:Hackett
2017/12/17 全球购物
水果花束:Fruit Bouquets
2017/12/20 全球购物
和谐家庭演讲稿
2014/05/24 职场文书
机关保密承诺书
2014/06/03 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书