php 一个遍历指定目录下所有子目录和子文件的函数(提示:可以使用递归的方法)
时间:2010-10-28 来源:phpwriter
代码:
<?php
//功能:遍历并打印指定目录下所有文件
//2010 .06 .20 by kang
//版本 1.00
function scan_dir($dir_name,$dir_flag=1) {
static $FILE_COUNT=1;//记录文件数目 初值为1 目录名称不记
$FILE_COUNT--;//每调用一次scan_dir()函数自减1
@$dir_handle=opendir($dir_name);//抑制错误信息显示 便于自定义错误显示
if(!$dir_handle)
die("目录打开错误!");
while(false!==($filename=readdir($dir_handle))){//文件名为‘0’时,readdir返回FALSE,判断返回值是否不全等
$flag=$dir_flag;
//古怪的 is_dir($filename) ! $filename这个路径必须能够寻到!当$filename不存在或者不是目录时返回false
if($filename!='.'&&$filename!='..'){
$FILE_COUNT++;//不记录当前路径和上一级路径
while($flag>0&&--$flag) //负数仍为真
echo ' ';
if(is_dir($dir_name.$filename)){//判断 是否为一个目录
echo '<strong>'."<a href=".$dir_name.$filename.">".$filename."</a></strong><br>";
scan_dir($dir_name.$filename.'/',$dir_flag+1);//$dir_flag标志目录树层次
}
else echo "<a href=".$dir_name.$filename.">".$filename."</a><br>";
}
}
closedir($dir_handle);//关闭目录句柄
echo "文件总数:".$FILE_COUNT.'<br>';
}
/*总结:
1,关于路径 目录的路径末尾都加上 '/' 以便后面与文件名字符串连接 形成新的 路径字符串
2,目录遍历 这是一个关于树的问题
3,is_dir()函数第一个参数必须是一个能够识别的PATH否则会因目录不存在而返回一个false容易误解
得出 “这不是一个目录”的错误结论 形成逻辑上的错误
4,注意当前路径'.'和上一级路径'..'的剔除 否则 在递归环节造成死循环 直至内存耗尽出错。
5,dir_flag这个变量是记录树的深度 以便于目录分级分层输出 */
/*不足
1,输出排版不完善
2,逻辑与表示层混乱 不分明 大忌!
3,面向过程
*/
?>
<?php
//功能:遍历并打印指定目录下所有文件
//2010 .06 .20 by kang
//版本 1.00
function scan_dir($dir_name,$dir_flag=1) {
static $FILE_COUNT=1;//记录文件数目 初值为1 目录名称不记
$FILE_COUNT--;//每调用一次scan_dir()函数自减1
@$dir_handle=opendir($dir_name);//抑制错误信息显示 便于自定义错误显示
if(!$dir_handle)
die("目录打开错误!");
while(false!==($filename=readdir($dir_handle))){//文件名为‘0’时,readdir返回FALSE,判断返回值是否不全等
$flag=$dir_flag;
//古怪的 is_dir($filename) ! $filename这个路径必须能够寻到!当$filename不存在或者不是目录时返回false
if($filename!='.'&&$filename!='..'){
$FILE_COUNT++;//不记录当前路径和上一级路径
while($flag>0&&--$flag) //负数仍为真
echo ' ';
if(is_dir($dir_name.$filename)){//判断 是否为一个目录
echo '<strong>'."<a href=".$dir_name.$filename.">".$filename."</a></strong><br>";
scan_dir($dir_name.$filename.'/',$dir_flag+1);//$dir_flag标志目录树层次
}
else echo "<a href=".$dir_name.$filename.">".$filename."</a><br>";
}
}
closedir($dir_handle);//关闭目录句柄
echo "文件总数:".$FILE_COUNT.'<br>';
}
/*总结:
1,关于路径 目录的路径末尾都加上 '/' 以便后面与文件名字符串连接 形成新的 路径字符串
2,目录遍历 这是一个关于树的问题
3,is_dir()函数第一个参数必须是一个能够识别的PATH否则会因目录不存在而返回一个false容易误解
得出 “这不是一个目录”的错误结论 形成逻辑上的错误
4,注意当前路径'.'和上一级路径'..'的剔除 否则 在递归环节造成死循环 直至内存耗尽出错。
5,dir_flag这个变量是记录树的深度 以便于目录分级分层输出 */
/*不足
1,输出排版不完善
2,逻辑与表示层混乱 不分明 大忌!
3,面向过程
*/
?>
相关阅读 更多 +