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 相关文章推荐
如何过滤高亮显示非法字符
Oct 09 PHP
操作Oracle的php类
Oct 09 PHP
echo(),print(),print_r()之间的区别?
Nov 19 PHP
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
基于AppServ,XAMPP,WAMP配置php.ini去掉警告信息(NOTICE)的方法详解
May 07 PHP
PHP中Session引起的脚本阻塞问题解决办法
Apr 08 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
YII Framework框架教程之安全方案详解
Mar 14 PHP
PHP自定义函数获取汉字首字母的方法
Dec 01 PHP
通过php动态传数据到highcharts
Apr 05 PHP
Laravel框架集合用法实例浅析
May 14 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
桌面中心(四)数据显示
2006/10/09 PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
2013/04/13 PHP
php生成二维码的几种方式整理及使用实例
2013/06/03 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
[原创]php实现 data url的图片生成与保存
2016/12/04 PHP
javascript中节点的最近的相关节点访问方法
2013/03/20 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
vue中实现上传文件给后台实例详解
2019/08/22 Javascript
关于layui的动态图标不显示的解决方法
2019/09/04 Javascript
使用webpack搭建pixi.js开发环境
2020/02/12 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
python基于ID3思想的决策树
2018/01/03 Python
python实现用户答题功能
2018/01/17 Python
详解Python如何生成词云的方法
2018/06/01 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
解决Keras 与 Tensorflow 版本之间的兼容性问题
2020/02/07 Python
python求numpy中array按列非零元素的平均值案例
2020/06/08 Python
python 利用toapi库自动生成api
2020/10/19 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
如何高效率的查找一个月以内的数据
2012/04/15 面试题
秋季运动会广播稿大全
2014/02/17 职场文书
小学学雷锋活动总结
2014/04/25 职场文书
领导干部群众路线个人对照检查材料思想汇报
2014/09/30 职场文书
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL