用来获取文件夹下所有文件,可以指定文件匹配规则,以及递归文件夹的深度
返回数据是包含所有文件的路径的数组
具体函数如下
/**
* 递归获取所有文件
*
* @param string $path 文件路径
* @param string $allowFiles 匹配文件名的正则表达式 (默认为空 全部文件)
* @param number $depth 递归深度, 默认 1
* @return array 所有文件
**/
function getfiles($path, $allowFiles = '', $depth = 1, $substart = 0, &$files = array()){
$depth--;
$path = realpath($path) . '/';
$substart = $substart ? $substart : strlen($path);
if (!is_dir($path)){
return false;
}
if($handle = opendir($path)){
while (false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..') {
$path2 = $path . $file;
if (is_dir($path2) && $depth > 0){
getfiles($path2, $allowFiles, $depth, $substart, $files);
} elseif (empty($allowFiles) || preg_match($allowFiles, $file)) {
$files[] = substr($path2, $substart);
}
}
}
}
sort($files);
return $files;
}
调用示例
// 获取当前目录 下所有文件 递归文件夹深度 3
print_r(getfiles(__DIR__, '', 3));
// 获取当前目录下的 jpg 与 png 图片
print_r(getfiles(__DIR__, '#\.(jpe?g|png)$#', 3));