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 相关文章推荐
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
PHP伪静态Rewrite设置之APACHE篇
Jul 30 PHP
Laravel框架路由配置总结、设置技巧大全
Sep 03 PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
php for 循环使用的简单实例
Jun 02 PHP
Android AsyncTack 异步任务实例详解
Nov 02 PHP
php基于session锁防止阻塞请求的方法分析
Aug 07 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 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
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
php中session使用示例
2014/03/29 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
2014/06/12 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
jQuery实现批量判断表单中文本框非空的方法(2种方法)
2015/12/09 Javascript
JS弹出层遮罩,隐藏背景页面滚动条细节优化分析
2016/04/29 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
Python实现遍历数据库并获取key的值
2015/05/17 Python
使用Python对Access读写操作
2017/03/30 Python
python实现画圆功能
2018/01/25 Python
Python理解递归的方法总结
2019/01/28 Python
Python3最长回文子串算法示例
2019/03/04 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
html5 input属性使用示例
2013/06/28 HTML / CSS
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
解释一下Windows的消息机制
2014/01/30 面试题
《商鞅南门立木》教学反思
2014/02/16 职场文书
平安建设工作方案
2014/06/02 职场文书
社区科普工作方案
2014/06/03 职场文书
房屋租赁合同补充协议
2014/10/11 职场文书
2014年导购员工作总结
2014/11/18 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
法律意见书范文
2015/05/20 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL