php遍历目录与文件夹的多种方法详解


Posted in PHP onNovember 14, 2013

遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的。PHP本身也提供了很多灰常有用的函数,正确地使用它们,不会有错滴。
下面就我个人学习过程中的一些总结,希望对想学PHP的童鞋有所帮助。
本函数可以列出指定目录下所有的文件(包括子目录下的)

function getfiles($path){ 
foreach(scandir($path) as $afile)
{
if($afile=='.'||$afile=='..') continue; 
if(is_dir($path.'/'.$afile)) 
{ 
getfiles($path.'/'.$afile); 
} else { 
echo $path.'/'.$afile.'<br />'; 
} 
} 
} //简单的demo,列出当前目录下所有的文件
getfiles(__DIR__);
 

scandir() 是返回指定目录下所有的文件和目录组成的数组,在PHP中,还提供了一个灰常强大的函数glob(),glob()有2个参数,至于第2个参数是可选的,稍后再讲。 直接来看,用glob()怎么遍历目录的。
可以看出,glob()返回的内容中已经过滤掉了'.'和'..',其中*表示遍历目录下所有文件。相应的,如果改为*.txt,则会遍历目录下所的txt文件。是不是很方便呢?它的方便之处可不止这一点,据元芳说,这里面还藏着一个天大的秘密,是什么呢?以后再说,有兴趣的话,可以给我留言交流。
function getfiles($path){ 
foreach(glob($path) as $afile){ 
if(is_dir($afile)) 
{ getfiles($afile.'/*'); } else { echo $afile.'<br />'; } 
} 
} //简单的demo,列出当前目录下所有的文件
getfiles(__DIR__);0
 

既然说用 *.txt,就会遍历目录下所的txt文件,那如果我想让它同时遍历某几种格式的文件呢?怎么办?肯定有童鞋想到用数组了,然后很快的写出来替换进去{*.txt,*.jpg,*.zip,...},当然也很快地发现,程序返回false,什么都得不到。不要失望,这涉及到了刚才所说的第2个可选参数,这个参数是用来改变glob的行为的,具体都有些什么,可以查阅PHP手册,这里不多讲,只说一个GLOB_BRACE,这是用来扩充 {a,b,c,...} 来匹配 'a','b' 或 'c',...的。用法如下:foreach(glob($path.'/{*.txt,*.jpg,*.zip,...}', GLOB_BRACE) as $fileName){...}
至于完整的遍历目录下所有的指定文件类型函数,我们可以看下面实例

遍历文件夹及子文件夹所有文件

<html>
    <body>
        <?php
            function traverse($path = '.') {
                $current_dir = opendir($path);    //opendir()返回一个目录句柄,失败返回false
                while(($file = readdir($current_dir)) !== false) {    //readdir()返回打开目录句柄中的一个条目
                    $sub_dir = $path . DIRECTORY_SEPARATOR . $file;    //构建子目录路径
                    if($file == '.' || $file == '..') {
                        continue;
                    } else if(is_dir($sub_dir)) {    //如果是目录,进行递归
                        echo 'Directory ' . $file . ':<br>';
                        traverse($sub_dir);
                    } else {    //如果是文件,直接输出
                        echo 'File in Directory ' . $path . ': ' . $file . '<br>';
                    }
                }
            }            traverse('xxtt');
        ?>
    </body>
</html>

一些常用的实例
<?php
$dir="E:/video"; //这里输入其它路径
//PHP遍历文件夹下所有文件
$handle=opendir($dir."."); 
echo "文件:<br>";
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..") {
echo $file; //输出文件名
}
}
closedir($handle); 
?>
 

用了这段代码遍历所有文件,帮我把所有文件名存为一个数组。
<?php
$s=explode("/n",trim(`dir/b e://video`));
print_r($s);
?>
<?php 
$dir="E:/video"; //这里输入其它路径 
//PHP遍历文件夹下所有文件 
$handle=opendir($dir."."); 
echo "文件:<br>"; 
while (false !== ($file = readdir($handle))) 
{ 
if ($file != "." && $file != "..") { 
$file=$file.','; //输出文件名 
$file=explode(',',$file);
} 
} 
print_r($file);//输出的就是数组了
closedir($handle); 
?>
<?php 
$dir="."; //这里输入其它路径 
//PHP遍历文件夹下所有文件 
$handle=opendir($dir."."); 
echo "文件:<br>"; 
//定义用于存储文件名的数组
$array_file = array();
while (false !== ($file = readdir($handle))) 
{ 
if ($file != "." && $file != "..") { 
$array_file[] = $file; //输出文件名 
} 
} 
closedir($handle);
print_r("<pre>");
print_r($array_file);
print_r("</pre>");
?>
PHP 相关文章推荐
使用sockets:从新闻组中获取文章(三)
Oct 09 PHP
PHP 进程锁定问题分析研究
Nov 24 PHP
php Memcache 中实现消息队列
Nov 24 PHP
PHP设计模式 注册表模式
Feb 05 PHP
PHP中将字符串转化为整数(int) intval() printf() 性能测试
Mar 20 PHP
php打开远程文件的方法和风险及解决方法
Nov 12 PHP
PHP会话控制:Session与Cookie详解
Sep 27 PHP
微信公众平台接口开发入门示例
Dec 24 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 PHP
Laravel推荐使用的十个辅助函数
May 10 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
Sep 16 PHP
php中引用符号(&amp;)的使用详解
Nov 13 #PHP
使用php验证复选框有效性的示例
Nov 13 #PHP
PHP PDOStatement:bindParam插入数据错误问题分析
Nov 13 #PHP
php curl模拟post请求小实例
Nov 13 #PHP
CodeIgniter生成网站sitemap地图的方法
Nov 13 #PHP
php模板原理讲解
Nov 13 #PHP
php构造函数实例讲解
Nov 13 #PHP
You might like
PHP6 先修班 JSON实例代码
2008/08/23 PHP
PHP获取当前文件所在目录 getcwd()函数
2009/05/13 PHP
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
判断PHP数组是否为空的代码
2011/09/08 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
javascript string字符串优化问题
2011/07/31 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
在vue中使用css modules替代scroped的方法
2018/03/10 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
[54:45]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 Optic vs OG
2018/04/02 DOTA
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
python去掉行尾的换行符方法
2017/01/04 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
python导入模块交叉引用的方法
2019/01/19 Python
Python 分布式缓存之Reids数据类型操作详解
2020/06/24 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
HTML5 预加载让页面得以快速呈现
2013/08/13 HTML / CSS
Html5实现二维码扫描并解析
2016/01/20 HTML / CSS
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
来自全球大都市的高级街头服饰:Pegador
2018/01/03 全球购物
为什么group by 和order by会使查询变慢
2014/05/16 面试题
中间件分为哪几类
2016/09/18 面试题
综合素质的自我鉴定
2013/10/07 职场文书
中专生的个人自我评价
2013/12/11 职场文书
天那边观后感
2015/06/09 职场文书
通知怎么写?
2019/04/17 职场文书
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server