PHP小技巧:glob() 函数 返回匹配指定模式的文件名或目录

近日在更新某个插件时,需要用到一个读取指定文件夹内所有文件并检查其创建时间的问题。首先第一反应想到的...

近日在更新某个插件时,需要用到一个读取指定文件夹内所有文件并检查其创建时间的问题。

首先第一反应想到的是遍历,但是在考虑如果文件夹下内容过多时,如果使用遍历是否会内存溢出?

因此想到了这个函数,可能并没有解决上述问题,但是这是一个值得记录的小技巧。


glob() 定义和用法


glob() 函数返回匹配指定模式的文件名或目录。


该函数返回一个包含有匹配文件 / 目录的数组。如果出错返回 false。


语法

glob(pattern,flags)
参数描述
pattern必需。规定检索模式。
flags

可选。规定特殊的设定。

  • GLOB_MARK - 在每个返回的项目中加一个斜线

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

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

  • GLOB_NOESCAPE - 反斜线不转义元字符

  • GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'

  • GLOB_ONLYDIR - 仅返回与模式匹配的目录项

  • GLOB_ERR - 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误

注释:GLOB_ERR 是 PHP 5.1 添加的。


image.png

另外,还可以直接将地址目录传输到变量,例如:glob('/www/*');


最后,提供一个几乎满足所有条件的获取指定目录下所有文件的函数

function GetAllFile($dir){
    if(function_exists('glob')){
    	$arr = glob($dir.'*');
    	if(is_array($arr) && count($arr)>0){
    		foreach($arr as $v){
    			$filetime = filemtime($v);
    			if((time()-$filetime)>$this->time){
    				@unlink($v);
    			}
    		}
    	}
    }elseif(function_exists('scandir')){
    	$arr = scandir($dir);
    	if(is_array($arr) && count($arr)>0){
    		foreach($arr as $v){
    			if($v=='.' || $v=='..') continue;
    			$filetime = filemtime($dir.$v);
    			if((time()-$filetime)>$this->time){
    				@unlink($dir.$v);
    			}
    		}
    	}
    }else{
    	$handle = opendir($dir);
    	if($handle){
    		while (false !== ($file = readdir($handle))) {
    			if($file != "." && $file != ".."){
    				if(is_file($dir.$file)){
    					$filetime = filemtime($dir.$file);
    					print_r($filetime);
    				}
    			}
    		}
    		closedir($handle);
    	}
    }
}


评论