php目录操作的循环与递归

                                    php目录操作的循环与递归

递归删除目录:

第一种:

<?php
$dir = dirname(__FILE__).'/test';  //要删除的非空目录
delFile($dir);                     //执行删除函数
function delFile($dir){
	$handle = @opendir($dir);
	// 如果整个目录为空直接删除
	if(is_empty_dir($dir)){
		@rmdir($dir);
	}else{
		while(!!$file = @readdir($handle)){
			if($file!='.' && $file!='..'){
				// 如果是目录判断是否为空 为空则直接删除
				if(filetype($dir.'/'.$file)=='dir'){
					if(is_empty_dir($dir.'/'.$file)){
						@rmdir($dir.'/'.$file);
						// 删除目录后判断父目录是否为空 为空则删除
						if(is_empty_dir($dir)){
							@rmdir($dir);
						}
				// 如果目录不为空则递归 删除文件
					}else{
						delFile($dir.'/'.$file);
					}
					// 如果是文件 直接删除
				}else{
					unlink($dir.'/'.$file);
					// 删除文件后判断父目录是否为空 为空则删除
					if(is_empty_dir($dir)){
						@rmdir($dir);
					}
				}
			}
		}
	}
}

//判断目录是否为空,true为空,false为不空
function is_empty_dir($fp){
	$H = @ opendir($fp);
	$i = 0;
	while($_file = @readdir($H)){
		// 如果是空的 则只有'.'和'..'两个目录
		$i++;  //$i>2 说明有其他目录 则不为空
	}
	@closedir($H);
	if($i > 2){
		return false;
	}else{
		return true;
	}
}
?>

 第二种:

<?php
$dir = dirname(__FILE__).'/test';  //要删除的非空目录
delDir($dir);                      //调用delDir函数
function delDir($dir){     
    if(file_exists($dir)){         //判断目录是否存在
        if($dir_handle = @opendir($dir)){  
            //打开目录返回目录资源,并判断是否成功
            while($filename = readdir($dir_handle)){
            //遍历目录,读出目录中的文件或目录
                if($filename!='.' && $filename!='..'){
            //一定要排除两个特殊的目录
                    $subFile = $dir."/".$filename;
            //将目录下的文件与当前目录相连
                    if(is_dir($subFile)){    //如果是目录
                        delDir($subFile);    //递归调用自己删除子文件
                    }
                    if(is_file($subFile)){   //如果是文件条件
                        unlink($subFile);    //直接删除这个文件
                    }
                }
            }
            closedir($dir_handle);  //关闭目录资源
            rmdir($dir);            //删除空目录
        }
    }
}

?>

 循环读出目录内容,递归读出目录大小

// 读出目录内容
function readDirectory($path){
	$hander = opendir($path);
	while (!!$item = readdir($hander)) {
		if($item!='.'&&$item!='..'&&$item!='images'){
			;
			if(filetype($path.'/'.$item)=='dir'){
				$arr['dir'][] = $item;
			}elseif(filetype($path.'/'.$item)=='file'){
				$arr['file'][] = $item;
			}
		}
	}
	closedir($hander);
	return $arr;
}
// 读出目录大小
function dirSize($path){
	global $filesize;  //全局
	$hander = opendir($path);
	while (!!$item = readdir($hander)) {
		if($item!='.'&&$item!='..'&&$item!='images'){
			if(is_dir($path.'/'.$item)){
				dirSize($path.'/'.$item);
			}elseif(is_file($path.'/'.$item)){
				$filesize += filesize($path.'/'.$item);
			}
		}
	}
	closedir($hander);
	return $filesize;
	// $filesize = 0; 循环显示时先清零
}

下载文件

// 下载文件
function downFile($filename){
	header('content-disposition:attachment;filename='.basename($filename));
	header('content-length:'.filesize($filename));
	readfile($filename);
}

 

    原文作者: 汉诺塔问题
    原文地址: https://blog.csdn.net/qq_41179401/article/details/84248648
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞