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 相关文章推荐
在WIN98下以apache模块方式安装php
Oct 09 PHP
PHP中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
PHP插入排序实现代码
Apr 04 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
Sep 23 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
PHP和MySql中32位和64位的整形范围是多少
Feb 18 PHP
PHP文件操作实例总结
Sep 27 PHP
thinkPHP线上自动加载异常与修复方法实例分析
Dec 01 PHP
PHP实现网站访问量计数器
Oct 27 PHP
PHP实现的猴王算法(猴子选大王)示例
Apr 30 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 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安全配置 如何配置使其更安全
2011/12/16 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
javascript 函数参数限制说明
2010/11/19 Javascript
js 判断浏览器使用的语言示例代码
2014/03/22 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
innerHTML中标签可以换行的方法汇总
2015/08/14 Javascript
jQuery Dialog对话框事件用法实例分析
2016/05/10 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
原生JS实现旋转轮播图+文字内容切换效果【附源码】
2018/09/29 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
Python下使用Psyco模块优化运行速度
2015/04/05 Python
django中send_mail功能实现详解
2018/02/06 Python
python数据批量写入ScrolledText的优化方法
2018/10/11 Python
详解python编译器和解释器的区别
2019/06/24 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
Pytorch 之修改Tensor部分值方式
2019/12/27 Python
使用tensorboard可视化loss和acc的实例
2020/01/21 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
几个Linux面试题笔试题
2012/12/01 面试题
整改通知书
2015/04/20 职场文书
Python 中的Sympy详细使用
2021/08/07 Python