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 相关文章推荐
如何提高MYSQL数据库的查询统计速度 select 索引应用
Apr 11 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
PHP可变函数的使用详解
Jun 14 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
解析如何去掉CodeIgniter URL中的index.php
Jun 25 PHP
PHP 输出URL的快捷方式示例代码
Sep 22 PHP
PHP命名空间(Namespace)简明教程
Jun 11 PHP
Yii不依赖Model的表单生成器用法实例
Dec 04 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
Dec 22 PHP
详解PHP实现异步调用的4种方法
Mar 14 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
thinkphp框架表单数组实现图片批量上传功能示例
Apr 04 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
这段js代码得节约你多少时间
2011/12/20 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
JavaScript中附件预览功能实现详解(推荐)
2017/08/15 Javascript
JavaScript学习笔记之函数记忆
2017/09/06 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
2017/10/15 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
Python中AND、OR的一个使用小技巧
2015/02/18 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
Python count函数使用方法实例解析
2020/03/23 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
快餐公司创业计划书
2014/04/29 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
休假证明书
2015/06/24 职场文书
新闻稿格式范文
2015/07/18 职场文书
医务人员岗前培训心得体会
2016/01/08 职场文书
初中政治教学反思
2016/02/23 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL