php递归删除目录多种方法代码

发布时间:2020-03-18编辑:脚本学堂
本文介绍了php递归删除目录的多种方法,如何删除空目录与非空目录,有关php中rmdir函数的用法,需要的朋友参考下。

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递归删除目录的方法。
 

复制代码 代码示例:
<?php 
function deldir($dirname){ 
    if(file_exists($dirname)){//首先判断目录是否有效 
   $dir = opendir($dirname);//用opendir打开目录 
   while($filename = readdir($dir)){//使用readdir循环读取目录里的内容 
    if($filename != "." && $filename != ".."){//排除"."和".."这两个特殊的目录 
  $file = $dirname."/".$filename; 
  if(is_dir($file)){//判断是否是目录,如果是则调用自身 
 deldir($file); //使用递归删除子目录   
  }else{ 
    @unlink($file);//删除文件 
  } 

   } 
  closedir($dir);//关闭文件操作句柄 
  rmdir($dirname);//删除目录 
    } 

?>

例5,php递归删除目录的例子。
 

复制代码 代码示例:
/**
 * 删除非空目录
 * @method rrmdir
 */
function rrmdir ($dir) {
    if (is_dir($dir)) {
   $fs = array_slice(scandir($dir), 2);
   foreach ($fs as $f) {
  $path = $dir . '/' . $f;
  is_dir($path) ? rrmdir($path) : unlink($path);
   }
   reset($fs);
   return rmdir($dir);
    }
}

例6,php递归删除目录的函数代码。
 

复制代码 代码示例:
<?php
function del_dir( $dir )
{
  if ( $handle = opendir( $dir ) )
  {
    while ( false !== ( $item = readdir( $handle ) ) )
    {
 if ( $item != "." && $item != ".." )
 {
   if ( is_dir( "$dir/$item" ) )
   {
del_dir( "$dir/$item" );
   }
   else
   {
unlink( "$dir/$item" ) ;
   }
 }
    }
    closedir( $handle );
    rmdir( $dir ) ;
  }
}
?>