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文件怎么打开 如何执行php文件
Dec 21 PHP
yii框架配置默认controller和action示例
Apr 30 PHP
PHP的APC模块实现上传进度条
Oct 27 PHP
PHP程序员的技术成长规划
Mar 25 PHP
php生成txt文件实例代码介绍
Apr 28 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
PHP sleep()函数, usleep()函数
Aug 25 PHP
PHP中in_array函数使用的问题与解决办法
Sep 11 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 PHP
PHP实现的简单异常处理类示例
May 04 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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日历[测试通过]
2008/03/27 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
PHP使用Mysqli类库实现完美分页效果的方法
2016/04/07 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
关于PHP中协程和阻塞的一些理解与思考
2017/08/11 PHP
javascript 数组学习资料收集
2010/04/11 Javascript
GreyBox技术总结(转)
2010/11/23 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
2015/01/23 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
全面解析Bootstrap中form、navbar的使用方法
2016/05/30 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
2020/07/11 Javascript
js+audio实现音乐播放器
2020/09/13 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
python抖音表白程序源代码
2019/04/07 Python
python实现银行管理系统
2019/10/25 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
新奇的小玩意:IWOOT
2016/07/21 全球购物
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
计算机专业推荐信范文
2013/11/27 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
汽车专业求职信
2014/06/05 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
会计工作态度自我评价
2015/03/06 职场文书
超级礼物观后感
2015/06/15 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python