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 相关文章推荐
WINDOWS服务器安装多套PHP的另类解决方案
Oct 09 PHP
生成静态页面的PHP类
Nov 25 PHP
PHP中的cookie
Nov 26 PHP
PHP中for循环语句的几种变型
Mar 16 PHP
php程序效率优化的一些策略小结
Jul 17 PHP
php连接数据库代码应用分析
May 29 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
php页面防重复提交方法总结
Nov 25 PHP
浅析php原型模式
Nov 25 PHP
一款简单实用的php操作mysql数据库类
Dec 08 PHP
详解php curl带有csrf-token验证模拟提交方法
Apr 18 PHP
php的优点总结 php有哪些优点
Jul 19 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垃圾代码优化操作代码
2010/08/05 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
JavaScript Event学习补遗 addEventSimple
2010/02/11 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
基于Bootstrap+jQuery.validate实现Form表单验证
2014/12/16 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
JavaScript的一些小技巧分享
2021/01/06 Javascript
[48:35]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 TNC vs Optic
2018/04/03 DOTA
Python字符转换
2008/09/06 Python
用Python的Flask框架结合MySQL写一个内存监控程序
2015/11/07 Python
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
python 中不同包 类 方法 之间的调用详解
2020/03/09 Python
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
Ruby如何进行文件操作
2014/07/17 面试题
在职人员函授期间自我评价分享
2013/11/08 职场文书
工厂门卫岗位职责
2013/11/25 职场文书
护士的岗位职责
2013/12/04 职场文书
行政总监岗位职责
2013/12/05 职场文书
市场专员岗位职责
2014/02/14 职场文书
协议书样本
2014/04/23 职场文书
安全生产先进个人事迹材料
2014/12/30 职场文书
个人简历自我评价怎么写
2015/03/10 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang
python实现简单的井字棋
2021/05/26 Python