狭义上来说,目录就相当于一个文件夹,里面含有文件和文件夹,其中里面的文件夹又是一个目录,所以涉及到递归操作
例如: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)
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 级别的错误。