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中的integer类型使用分析
Jul 27 PHP
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
php旋转图片90度的方法
Nov 07 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
PHP实现抓取Google IP并自动修改hosts文件
Feb 12 PHP
php将数组转换成csv格式文件输出的方法
Mar 14 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
PHP面试题之文件目录操作
Oct 15 PHP
CodeIgniter 完美解决URL含有中文字符串
May 13 PHP
一个简单的php MVC留言本实例代码(必看篇)
Sep 22 PHP
PHP 爬取网页的主要方法
Jul 13 PHP
php判断数组是否为空的实例方法
May 10 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
改德生G88 - 加装等响度低音提升电路
2021/03/02 无线电
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
php事务处理实例详解
2014/07/11 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
javascript学习随笔(使用window和frame)的技巧
2007/03/08 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
常见的原始JS选择器使用方法总结
2014/04/09 Javascript
javascript属性访问表达式用法分析
2015/04/25 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
面试常见的js算法题
2017/03/23 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
2018/02/22 Javascript
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
2018/05/17 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
Python下的常用下载安装工具pip的安装方法
2015/11/13 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
贝玲妃美国官方网站:Benefit美国
2016/08/28 全球购物
怎样声明接口
2014/09/19 面试题
中专毕业生的自我鉴定
2013/12/01 职场文书
教师辞职书范文
2015/02/26 职场文书
2015建军节87周年演讲稿
2015/03/19 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
2016年社区创先争优活动总结
2016/04/05 职场文书
详解nginx安装过程并代理下载服务器文件
2022/02/12 Servers
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python