使用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中使用模板的方法
May 24 PHP
PHP网站基础优化方法小结
Sep 29 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
Oct 12 PHP
php二分查找二种实现示例
Mar 12 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
PHP中的魔术方法总结和使用实例
May 11 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
Dec 19 PHP
thinkPHP查询方式小结
Jan 09 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
Feb 23 PHP
Yii2使用自带的UploadedFile实现的文件上传
Jun 20 PHP
谈谈php对接芝麻信用踩的坑
Dec 01 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 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仿discuz分页效果代码
2008/10/02 PHP
一步一步学习PHP(1) php开发环境配置
2010/02/15 PHP
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
2012/07/01 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
javascript 面向对象 function类
2010/05/13 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
怎么判断js脚本加载完成
2014/02/28 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
JQuery为元素添加样式的实现方法
2016/07/20 Javascript
基于jQuery实现瀑布流页面
2017/04/11 jQuery
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
vue.js的vue-cli脚手架中使用百度地图API的实例
2019/01/21 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
centos下更新Python版本的步骤
2013/02/12 Python
Python之用户输入的实例
2018/06/22 Python
Python定时任务工具之APScheduler使用方式
2019/07/24 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
基于Python爬取股票数据过程详解
2020/10/21 Python
Html5移动端适配IphoneX等机型的方法
2019/06/25 HTML / CSS
windeln官方海外旗舰店:德淘超人气母婴超市
2017/12/15 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
什么是组件架构
2016/05/15 面试题
学院书画协会部门岗位职责
2013/12/01 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
经济类毕业生求职信
2014/06/26 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
货款欠条范本
2015/07/03 职场文书
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL