今天早上在地铁上看了关于文件和文件夹的一章,正好最近刚搞懂linux的文件系统,觉得对文件属性的访问跟Shell命令很像,所以想晚上来实践一下。
发现php的文件夹函数好像没有提供遍历文件夹下的所有文件(包括子目录中的文件),于是,就想自己实现一个。
在写的时候发现一些操作文件夹的函数并不是自己想的那样。比如,dirname()根据提供的完整文件路径来取得文件所在的文件夹的路径,但如果你传入的是文件夹,它取的就是它的父文件夹。这点要明白。basename()也是同样的道理,传入文件夹路径取得就是文件夹的名字。这两个函数返回的结果结尾都不加'/'
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
|
<?php
$dirPath = '/home/WWW/Test' ; //目录,结尾不加'/‘
//执行遍历
recursion_readdir( $dirPath );
/**
*@summary 重复times次字符char
*@param $char 需要重复的字符
*@param $times 重复次数
*@return 返回重复字符组成的字符串
*/
function forChar( $char = '-' , $times =0){
$result = '' ;
for ( $i =0; $i < $times ; $i ++){
$result .= $char ;
}
return $result ;
}
/**
*@summary 递归读取目录
*@param $dirPath 目录
*@param $Deep=0 深度,用于缩进,无需手动设置
*@return 无
*/
function recursion_readdir( $dirPath , $Deep =0){
$resDir =opendir( $dirPath );
while ( $basename =readdir( $resDir )){
//当前文件路径
$path = $dirPath . '/' . $basename ;
if ( is_dir ( $path ) AND $basename != '.' AND $basename != '..' ){
//是目录,打印目录名,继续迭代
echo forChar( '-' , $Deep ). $basename . '/<br/>' ;
$Deep ++; //深度+1
recursion_readdir( $path , $Deep );
} else if ( basename ( $path )!= '.' AND basename ( $path )!= '..' ){
//不是文件夹,打印文件名
echo forChar( '-' , $Deep ). basename ( $path ). '<br/>' ;
}
}
closedir ( $resDir );
}
|
以上这篇PHP递归遍历指定文件夹内的文件实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。