php递归删除目录多种方法
在php中删除一个空目录用rmdir() 函数,如果删除一个非空目录,则无法进行快速删除,必须先将目录中文件删除,但是目录里可能还会有子目录,因此需要进行递归删除。
例1,php递归删除目录的方法。
 
<?php  
function deletedir($dir){  
 if(!handle=@opendir($dir)){   //检测要打开目录是否存在  
die("没有该目录");  
 }  
while(false !==($file=readdir($handle))){  
if($file!=="."&&$file!==".."){  //排除当前目录与父级目录  
   $file=$dir .DIRECTORY_SEPARATOR. $file;  
   if(is_dir($file)){  
    deletedir($file);  
   }else{  // www.jb51.net
    if(@unlink($file)){  
 echo "文件<b>$file</b>删除成功。<br>";  
    }else{  
  echo  "文件<b>$file</b>删除失败!<br>";  
   }  
 }  
}  
    if(@rmdir($dir)){  
 echo "目录<b>$dir</b>删除成功了。<br>n";  
    }else{  
 echo "目录<b>$dir</b>删除失败!<br>n";  
  }  
} 
//测试程序  
$dir="/var/www/test";  
deletedir($dir);  
?> 
例2,Php递归删除目录方法(兼容中文目录和文件)
 
<?php 
/*
本函数支持中文删除目录,只测试了window下删除,linux未测试
*  www.jb200.com
*/
header("Content-type: text/html; charset=gb2312");
function delete_dir($tmp_path){
    if(!is_writable($tmp_path) && is_dir($tmp_path)){
   chmod($tmp_path,0777);
    }
    $encode = mb_detect_encoding($tmp_path, array('UTF-8','GB2312','ASCII','GBK'));
    $tmp_path = iconv($encode,'gb2312',$tmp_path);
 
    $handle_object = scandir($tmp_path);
    if(count(scandir($tmp_path))==2){
   if(rmdir($tmp_path)){
  echo $tmp_path.'<br />';
   }else{
  echo $tmp_path.'<br />';
   }
   return ;
    }
    foreach($handle_object as $val){   
   if($val!='..' && $val!='.' && $val!=''){
  if(filetype($tmp_path.'/'.$val)=='dir'){
 if(count(scandir($tmp_path.'/'.$val))==2){
if(rmdir($tmp_path.'/'.$val)){
    echo $$tmp_path.'/'.$val.'<br />';
}else{
    echo $$tmp_path.'/'.$val.'<br />';
}
 }else{
delete_dir($tmp_path.'/'.$val);
 } 
  }else{
 if(unlink($tmp_path.'/'.$val)){
echo $$tmp_path.'/'.$val.'<br />';
 }else{
echo $$tmp_path.'/'.$val.'<br />';
 }
  } 
   }else{
  continue;
   }
    }
    if(rmdir($tmp_path)){
   echo $tmp_path.'<br />';
    }else{
   echo $tmp_path.'<br />';
    }
    return ;
}
delete_dir('D:/AppServ/www/testing/哈哈');
?>
例3,参数$dir文件名例子:admin/runtime。
 
//删除目录及所包含文件函数   
function deldir($dir) {   
//打开文件目录   
$dh = opendir($dir);   
//循环读取文件   
while ($file = readdir($dh)) {   
    if($file != '.' && $file != '..') {   
   $fullpath = $dir . '/' . $file;  
    //判断是否为目录   
   if(!is_dir($fullpath)) {   
  echo $fullpath."已被删除<br>";   
   //如果不是,删除该文件   
  if(!unlink($fullpath)) {   
  }   
  } else {   
  //如果是目录,递归本身删除下级目录 
deldir($fullpath);   
  }   
   }   
   }   
    //关闭目录   
closedir($dh);   
   //删除目录   
  //if(rmdir($dir)) {   
    //    return true;   
//    } else {   
//    return false;   
  //  }   
}
例4,php递归删除目录的方法。
 
例5,php递归删除目录的例子。
 
例6,php递归删除目录的函数代码。