php遍历目录与文件夹的多种方法详解

 更新时间:2013年11月14日 09:30:19   作者:  
介绍几个php遍历目录的方法,可以遍历目录及目录中的文件,供大家参考

遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的。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读取PDF内容配合Xpdf的使用

    PHP读取PDF内容配合Xpdf的使用

    最近领导拍脑袋想出了一个需求,要我读取PDF里面的内容,并且入库存为正文,用来搜索,需要的朋友可以了解下
    2012-11-11
  • Codeigniter校验ip地址的方法

    Codeigniter校验ip地址的方法

    这篇文章主要介绍了Codeigniter校验ip地址的方法,实例分析了Codeigniter获取与校验ip地址的技巧,需要的朋友可以参考下
    2015-03-03
  • 多个PHP中文字符串截取函数

    多个PHP中文字符串截取函数

    字符串截取是一个非常常见的编程任务,而往往带中文的字符串截取会经常用到。虽然不难,但是自己写函数实现又耗费时间,这里介绍一个比较好用的字符串截取函数,能够胜任基本的需求了
    2013-11-11
  • ThinkPHP中create()方法自动验证表单信息

    ThinkPHP中create()方法自动验证表单信息

    这篇文章主要为大家详细介绍了ThinkPHP中create()方法自动验证表单信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • PHP实现把文本中的URL转换为链接的auolink()函数分享

    PHP实现把文本中的URL转换为链接的auolink()函数分享

    这篇文章主要介绍了PHP实现把文本中的URL转换为链接的auolink()函数分享,非常简洁易用的一个函数,原作者还有另外一些很Nice的PHP函数,需要的朋友可以参考下
    2014-07-07
  • thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析

    thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析

    这篇文章主要介绍了thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法,结合实例形式分析了thinkPHP5.1框架中容器与门面的定义、实现方法及相关操作注意事项,需要的朋友可以参考下
    2019-08-08
  • PHP文件类型检查及fileinfo模块安装使用详解

    PHP文件类型检查及fileinfo模块安装使用详解

    这篇文章主要介绍了PHP文件类型检查及fileinfo模块安装使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • PHP学习记录之数组函数

    PHP学习记录之数组函数

    这篇文章主要介绍了PHP学习记录之数组函数,php中的数组是一个有序映射,数组可以接受任意数量用逗号分隔符的键值对。下面结合代码实例给大家接受,感兴趣的朋友一起看看吧
    2018-06-06
  • laravel 时间格式转时间戳的例子

    laravel 时间格式转时间戳的例子

    今天小编就为大家分享一篇laravel 时间格式转时间戳的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Laravel手动分页实现方法详解

    Laravel手动分页实现方法详解

    这篇文章主要介绍了Laravel手动分页实现方法,结合实例形式较为详细的分析了Laravel手动分页相关源码修改与方法调用技巧,需要的朋友可以参考下
    2016-10-10

最新评论