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

PHP写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。

2017-02-23 23:52 711 查看
狭义上来说,目录就相当于一个文件夹,里面含有文件和文件夹,其中里面的文件夹又是一个目录,所以涉及到递归操作

例如:D盘下建立文件夹testscandir,testscandir有文件a.php,b.php和文件夹c,文件夹c里有c1.txt和c2.doc

<?php
function xf_scandir($dir)
{
$files = array();
if( $handle=opendir($dir) ){                             //$handle=Resource id #3

while( ($file = readdir($handle)) !== false ){       //echo $file;echo "<hr>"; //$file分别是 .  ..   a.php   b.php   c
if( $file != ".." && $file != "." ){
if( is_dir($dir . "/" . $file) ){   //文件夹c
$files[$file] = xf_scandir($dir . "/" . $file);
}else{                              //文件a.php,b.php
$files[] = $file;                          //var_dump($file);echo "<hr>";//分别是 a.php  b.php
}
}
}

closedir($handle);
return $files;
}
}

$re=xf_scandir('D:\testscandir');
var_dump($re);
/*
array (size=3)
0 => string 'a.php' (length=5)
1 => string 'b.php' (length=5)
'c' =>
array (size=2)
0 => string 'c1.txt' (length=6)

4000
1 => string 'c2.doc' (length=6)
*/

?>


opendir(path,context); //打开目录句柄

path 必需。规定要打开的目录路径。

context 可选。规定目录句柄的环境。context 是可修改目录流的行为的一套选项。

返回值:

成功则返回目录句柄资源。失败则返回 FALSE。

如果路径不是合法目录,或者由于许可限制或文件系统错误导致的目录不能打开,则抛出 E_WARNING 级别的错误。

您可以通过在函数名称前添加 ‘@’ 来隐藏 opendir() 的错误输出。

readdir(dir_handle); //返回目录中下一个文件的文件名

dir_handle 可选。指定之前由 opendir() 打开的目录句柄资源。如果该参数未指定,则使用最后一个由 opendir() 打开的链接。

返回值: 若成功则返回条目名称(文件名),失败则返回 FALSE。

bool is_dir ( string $filename )

如果文件名存在并且为目录则返回 TRUE。如果 filename 是一个相对路径,则按照当前工作目录检查其相对路径。

scandir(directory,sorting_order,context); //返回指定目录中的文件和目录的数组

directory 必需。规定要扫描的目录。

sorting_order

可选。规定排列顺序。默认是 0,表示按字母升序排列。

如果设置为 SCANDIR_SORT_DESCENDING 或者 1,则表示按字母降序排列。

如果设置为 SCANDIR_SORT_NONE,则返回未排列的结果。

context 可选。规定目录句柄的环境。context 是可修改目录流的行为的一套选项。

返回值:

若成功则返回文件和目录的数组。失败则返回 FALSE。

如果 directory 不是目录,则抛出 E_WARNING 级别的错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: