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 相关文章推荐
PHP6 先修班 JSON实例代码
Aug 23 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
解析curl提交GET,POST,Cookie的简单方法
Jun 29 PHP
PHP时间戳 strtotime()使用方法和技巧
Oct 29 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
Jul 04 PHP
学习php设计模式 php实现单例模式(singleton)
Dec 07 PHP
php实现图片上传并利用ImageMagick生成缩略图
Mar 14 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
php array_reverse 以相反的顺序返回数组实例代码
Apr 11 PHP
PHP实现的二分查找算法实例分析
Dec 19 PHP
PHP二维索引数组的遍历实例分析【2种方式】
Jun 24 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中的array数组类型分析说明
2010/07/27 PHP
PHP链接MySQL的常用扩展函数
2014/10/23 PHP
php文件系统处理方法小结
2016/05/23 PHP
Discuz不使用插件实现简单的打赏功能
2019/03/21 PHP
Javascript中的相等与不等运算
2010/04/25 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
Jquery中国地图热点效果-鼠标经过弹出提示层信息的简单实例
2014/02/12 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
python让列表倒序输出的实例
2018/06/25 Python
python中单下划线_的常见用法总结
2018/07/10 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
python的sorted用法详解
2019/06/25 Python
在python中做正态性检验示例
2019/12/09 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
美国美食礼品篮网站:Gourmet Gift Baskets
2019/12/15 全球购物
会计学个人自荐信模板
2013/12/13 职场文书
2014年服务行业工作总结
2014/11/18 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
汽车质检员岗位职责
2015/04/08 职场文书
2015年资料员工作总结
2015/04/25 职场文书
观后感的写法
2015/06/19 职场文书
怎样评估创业计划书是否有可行性?
2019/08/07 职场文书
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript