释放双眼,带上耳机,听听看~!
PHP遍历文件夹
封装一个遍历文件夹函数
用于对指定路径的文件夹进行遍历,获取文件夹中的文件路径数组。
代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 1<?php
2echo "<pre>";
3print_r(traverseDir('./ErrorFiles'));
4/**
5 * 遍历指定路径的文件夹中的文件
6 * @param $dirPath 文件绝对路径
7 * @param $type 遍历方法 默认参数为 $type='all' 返回所有文件作为一维数组返回,如果$type='file',则与多维数组返回
8 * @return array 检索到文件成功返回内部文件路径数组,失败返回false;
9 */
10function traverseDir($dirPath=false,$type='all'){
11 //检测是否为文件夹
12 if(!$dirPath||!is_dir($dirPath)){
13 return false;
14 }
15 $files = array();
16
17 //增加一个@抑制错误
18 if(@$handle = opendir($dirPath)){
19 while(($file=readdir($handle))!==false){
20 //排除'.'当前目录和'..'上级目录
21 if($file != '..' && $file != '.'){
22 //只记录文件
23 if($type == 'file'){
24 if(is_dir($dirPath.DIRECTORY_SEPARATOR.$file)){
25 //如果是文件夹,则重新遍历该文件的文件
26 $files[$file] = traverseDir($dirPath.DIRECTORY_SEPARATOR.$file,'file');
27 //把文件存入数组中
28 foreach($files[$file] as $k => $v){
29 if(is_file($v)){
30 $files[] = $v;
31 //删除源数组中的对应文件路径
32 unset($files[$file][$k]);
33 }
34 }
35
36 //删除源数组中的对应文件路径数组
37 unset($files[$file]);
38 }else{
39 //如果是文件则直接存入数组
40 $files[] = $dirPath.DIRECTORY_SEPARATOR.$file;
41 }
42 }else{//记录含文件
43 if(is_dir($dirPath.DIRECTORY_SEPARATOR.$file)){
44 //如果是文件夹,则重新遍历该文件的文件
45 $files[$file] = traverseDir($dirPath.DIRECTORY_SEPARATOR.$file);
46 }else{
47 //如果是文件则直接存入数组
48 $files[] = $dirPath.DIRECTORY_SEPARATOR.$file;
49 }
50 }
51 }
52 }
53 closedir($handle);
54 }
55 return $files;
56}
57
58
59
60
61
62
63
文件结构
读取结果
- 默认读取为多维数组 traverseDir('./ErrorFiles');
- 一维数组读取结果 traverseDir('./ErrorFiles','file');