当前位置:首页 > PHP教程 > php应用 > 列表

php glob实现目录文件遍历与寻找与模式匹配的文件路径

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-16 22:07:31 浏览: 评论:0 

采用PHP函数glob实现寻找与模式匹配的文件路径,主要讨论glob()函数的作用和用法,利用glob函数读取目录比其它的要快N倍,因为glob函数是内置函数处理起来自然要快.

一,函数原型

array glob(string pattern[,int flags])

注意:glob()函数获取的是一个数组,其返回一个包含有匹配文件/目录的数组,如果出错返回FALSE.

二,版本兼容

PHP 4 >= 4.3.0, PHP 5

三,函数的基础用法与实例

1,匹配目录下.txt后缀的文件,代码如下:

  1. <?php  
  2. foreach (glob("*.txt"as $filename) {  
  3.     echo $filename;  
  4. }  
  5. ?> 

2,实现兼容大小写匹配,代码如下:

  1. <?php  
  2. $pattern = sql_case("*.pdf");  
  3. var_dump(glob($pattern));  
  4. ?> 
  5.  
  6. //类似如下: 
  7.  
  8. <?php  
  9. foreach (array_merge(glob("*.pdf"),glob("*.PDF")) as $filename) {  
  10.      echo "$filename n";  
  11. }  
  12. ?> 

3,获取目录下的所有子目录,代码如下:

  1. <?php  
  2. function listdirs($dir) {  
  3.    static $alldirs = array();  
  4.    $dirs = glob($dir . '/*', GLOB_ONLYDIR);  
  5.    if (count($dirs) > 0) {  
  6.        foreach ($dirs as $d$alldirs[] = $d;  
  7.    }  
  8.    foreach ($dirs as $dir) listdirs($dir);  
  9.    return $alldirs;  
  10. }  
  11. ?> 

4,匹配所有文件,代码如下:

  1. <?php  
  2. $files = glob('{,.}*', GLOB_BRACE);  
  3. ?>//开源软件:phpfensi.com 

四,注意事项

1,不能作用于远程文件,被检查的文件必须通过服务器的文件系统访问。

2,使用 glob("[myfolder]/*.txt")将不能匹配,解决方法为 glob("[myfolder]/*.txt"),注意[]字符应用。

3,其次是第二个参数flags有效标记说明

(1)GLOB_MARK - 在每个返回的项目中加一个斜线

(2)GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)

(3)GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式

(4)GLOB_NOESCAPE - 反斜线不转义元字符

(5)GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'

(6)GLOB_ONLYDIR - 仅返回与模式匹配的目录项 注意: 在 PHP 4.3.3 版本之前 GLOB_ONLYDIR 在 Windows 或者其它不使用 GNU C 库的系统上不可用。

(7)GLOB_ERR - 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误 注意: GLOB_ERR 是 PHP 5.1 添加的。

glob()函数的典型应用是读取数据表文件,如获取某个目录下的.sql后缀文件,这种在单元测试中非常实用,可实现读取sql文件重建数据库等,具体请参与PHP手册,请关注下一期PHP内置函数研究系列.

其它参考,代码如下:

  1. //例子 1 
  2. <?php 
  3. print_r(glob("*.txt")); 
  4. ?>//输出类似: 
  5. Array 
  6. [0] => target.txt 
  7. [1] => source.txt 
  8. [2] => test.txt 
  9. [3] => test2.txt 
  10. )//例子 2 
  11. <?php 
  12. print_r(glob("*.*")); 
  13. ?>//输出类似: 
  14. Array 
  15. [0] => contacts.csv 
  16. [1] => default.php 
  17. [2] => target.txt 
  18. [3] => source.txt 
  19. [4] => tem1.tmp 
  20. [5] => test.htm 
  21. [6] => test.ini 
  22. [7] => test.php 
  23. [8] => test.txt 
  24. [9] => test2.txt 
  25. )

Tags: php glob 目录文件遍历 模式匹配

分享到: