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 配置文件中open_basedir选项作用
Jul 19 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
PHP中time(),date(),mktime()区别介绍
Sep 28 PHP
PHP实现自动登入google play下载app report的方法
Sep 23 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
WordPress中制作导航菜单的PHP核心方法讲解
Dec 11 PHP
php阳历转农历优化版
Aug 08 PHP
PHP简单获取网站百度搜索和搜狗搜索收录量的方法
Aug 23 PHP
浅谈PHP的数据库接口和技术
Dec 09 PHP
php实现简单加入购物车功能
Mar 07 PHP
PHP数组常用函数实例小结
Aug 20 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 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无限分类使用concat如何实现
2015/11/05 PHP
PHP Post获取不到非表单数据的问题解决办法
2018/02/27 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
CSS3画一个阴阳八卦图
2021/03/09 HTML / CSS
详解Javascript 装载和执行
2014/11/17 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
基于vue,vue-router, vuex及addRoutes进行权限控制问题
2018/05/02 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
微信小程序时间选择插件使用详解
2018/12/28 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
Python中字典的浅拷贝与深拷贝用法实例分析
2018/01/02 Python
python去掉空白行的多种实现代码
2018/03/19 Python
Python解决两个整数相除只得到整数部分的实例
2018/11/10 Python
Python 互换字典的键值对实例
2019/02/12 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
Python imread、newaxis用法详解
2019/11/04 Python
Django REST framework 单元测试实例解析
2019/11/07 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
Python sorted排序方法如何实现
2020/03/31 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
2014年党支部工作总结
2014/11/13 职场文书
部队2014年终工作总结
2014/11/27 职场文书
校车安全管理责任书
2015/05/11 职场文书
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript