您的位置:首页 > 编程语言 > PHP开发

采用PHP函数glob实现寻找与模式匹配的文件路径

2011-09-12 22:07 337 查看
采用PHP函数glob实现寻找与模式匹配的文件路径,主要讨论glob()函数的作用和用法。

在开发过程中,有时候需要在目录中匹配某一类文件和目录,如后缀为.txt或.ini等文件,如果采用普通方案如读取目录然后使用strpos()函数进行查询,速度很慢(如果目录下文件很多),而且匹配的策略也非常不灵活,glob()函数依照libc glob() 函数使用的规则寻找所有与pattern匹配的文件路径,类似于一般shells所用的规则一样,但不进行缩写扩展或参数替代。采用glob()函数只需要实现一个匹配规则就可以获取到所需要的文件和目录。简单来说glob()函数是一个获取文件和目录的函数。

一,函数原型

array glob ( string pattern [, int flags] )

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

二,版本兼容

PHP 4 >= 4.3.0, PHP 5

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


1,匹配目录下.txt后缀的文件

<?php
foreach (glob("*.txt") as $filename) {
echo $filename;
}
?>


2,实现兼容大小写匹配

<?php
$pattern = sql_case("*.pdf");
var_dump(glob($pattern));
?>


类似如下

<?php
foreach (array_merge(glob("*.pdf"),glob("*.PDF")) as $filename) {
echo "$filename \n";
}
?>


3,获取目录下的所有子目录

<?php
function listdirs($dir) {
static $alldirs = array();
$dirs = glob($dir . '/*', GLOB_ONLYDIR);
if (count($dirs) > 0) {
foreach ($dirs as $d) $alldirs[] = $d;
}
foreach ($dirs as $dir) listdirs($dir);
return $alldirs;
}
?>


4,匹配所有文件

<?php
$files = glob('{,.}*', GLOB_BRACE);
?>


四,注意事项

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文件重建数据库等
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: