Heim  >  Artikel  >  php教程  >  PHP中的目录遍历细说教程

PHP中的目录遍历细说教程

WBOY
WBOYOriginal
2016-06-21 08:51:17788Durchsuche

HP学习教程文章简介: Php中的目录遍历细说教程 在编写php应用的过程当中,对指定目录的遍历、文件的筛选是在所难免也是至关重要 的,PHP本身提供了解析和读取目录的强大方法。牢牢掌握这些方法是每一个phper所

 

Php中的目录遍历细说教程

在编写php应用的过程当中,对指定目录的遍历、文件的筛选是在所难免也是至关重要 的,PHP本身提供了解析和读取目录的强大方法。牢牢掌握这些方法是每一个phper所必须的。本文将对几个重要方法总结和归纳,笔者经验尚浅,如有错误 和疏漏希望网友们加以指正,以期共同进步。


函数                               返回类型                                      描述
opendir                          资源句柄                      得到指定目录的资源句柄
is_dir                              布尔                              判断是否为目录
is_readable                  布尔                                  给定目录是否可读
readdir                       字符串                              通过资源句柄中读一个文件的文件名,指针后移,如果不存 在或者已在最后的话在返回false
closedir                          void                                  关闭资源句柄,释放资源
scandir                           数组                             返回指定目录下所有的文件和目录组成的数组



遍历指定文件夹中的文件



该段代码完成对指定目录中文件与目录的的基本遍历,其中readdir 函数读取给定目录资源句柄$handle里的文件并将指针后移,如果已经达到最后一个文件的话,则返回false。另外"."代表本层目录".."代表上层目录也会被列出,在大多数情况下我们需要把他们过滤掉。                    



遍历指定文件夹下指定类型的文件
                
多数情况下,我们对目录的遍历往往要受限于某些条件,例如,我们只要遍历出指定目录下的图像文件或者所有的xml文件。为满足上面的要求,我们重写代码,并且把代码封装到一个函数里。该函数能过滤掉"."和".."和目录,并根具参数返回指定的扩展名的文件。





以上函数,可以获得指定目录下指定类型的文件。如果我们想获得mypics下的所有jpeg和png的文件的话调用该函数:                

$temp = getFileFrom("./mypics",array('jpeg','png'));

目录树的递归遍历
  我想在php中最实用的递归函数就是对目录的递归遍历了,下面的函数可以获得指定目录的完整结构。同时用scandir代替了opendir来简化代码。                





神奇的glob
 glob是php4.3.0后加入的十分强大的函数,可惜官方手册上的介绍并不详细。该函数定义如下:                

array glob ( string $pattern [, int $flags = 0 ] )

 glob有两个参数 $pattern 与 可选的 $flag。$pattern 在字面是模板而不是单纯的指定目录的字符串, $flag 是一些常量参数,用来改变glob的行为。                

通过实践来学习他的用法。我们的code1是用来遍历一个目录下所有文件的代码,如果用glob写的话可以这样。                






我 们可以看到区别,首先glob要简单的多,其次glob的第一个参数,"d:/wamp/*"告诉glob要查找的文件是"d:/wamp"目录下的所有 文件,由此可见$pattern更像是操作系统的通配符。而且返回的内容中已经过滤掉了'.'和'..',如果我们要找到所有的bmp文件只要把参数写 成"d:/wamp/*.bmp"就可以了,这下子简单多了。举个常见的例子,比如我们的网站下有个文件夹叫wallpaper,下面的每个目录是 wallpaper的分类,而每一个分类下又包含两目录,origin(正常大小的),和thumb(缩略图),我们需要一段代码来读取所有分类的所有缩 略图,如果不是用glob将是很麻烦的一段代码,用glob的话,代码就是下面的样子了:                    


foreach(glob("wallpaper/*/thumb/*") as $fileName){
        ehco $fileName;
}


 glob第二个参数的含义:                    

GLOB_MARK                             为每一个目录添加一个反斜杠
GLOB_NOSORT                      结果不经过排序
GLOB_NOCHECK                  如果没有匹配的结果,则返回模板本身
GLOB_NOSPACE                   Backslashes do not quote metacharacters
GLOB_BRACE                        {a,b,c}分解为a,b,c并分别匹配(重要)
GLOB_ONLYDIR                     仅返回目录
GLOB_ERR                            Stop on read errors (like unreadable directories), by default errors are ignored.



如果我们要查找图片的文件的话可以这样写                    

foreach(glob("d:/wamp/{*.jpeg,*.jpg,*.gif}", GLOB_BRACE) as $filename){
      echo $filename; 
}

 下面的代码是对getFileFrom()函数的改写,代码简单很多,难点变成了对$exts参数的解析。                



以上是对目录遍历的一个简单总结,算是个人的学习笔记了,如果也能对大家有所帮助,我很高兴。     



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn