版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41179401/article/details/84248648
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); //删除空目录
}
}
}
?>