好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP递归删除文件与目录函数 - php文件操作

PHP递归删除文件与目录函数

在php中删除文件与目录rmdir()函数就可以搞定,但是要删除一个非空目录,将不能进行快速的删除,必须先将目录中文件删除,但是目录里可能还会有子目录所以要进行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 ); //删除目录         }    }    ?> 

使用实例: Public是一个文件夹,里面有许多文件夹和文件,调用deldir($dirname)把它删除.

<?php    $dir = 'Public' ; //传入一个文件夹路径     deldir( $dir ); //调用函数     ?> 

说明: 首先判断Public是否存在,如果在则打开Public,然后使用readdir循环读取Public目录里的内容,如果存在"."和".."这两个特殊目录则排除掉,如果遇到文件夹则调用自身处理,直到条件不满足,遇到文件则直接删除掉,最后层层跳出删除Public.

实例二,删除非空目录,代码如下:

/*    自定义的删除函数,可以删除文件和递归删除文件夹   */     function  my_del( $path )  {    if ( is_dir ( $path ))   {      $file_list = scandir( $path );      foreach  ( $file_list   as   $file )     {       if (  $file != '.'  &&  $file != '..' )      {       my_del( $path . '/' . $file );      }     }     @ rmdir ( $path );   //这种方法不用判断文件夹是否为空, 因为不管开始时文件夹是否为空,到达这里的时候,都是空的      }    else    {    @unlink( $path );     //这两个地方最好还是要用@屏蔽一下warning错误,看着闹心    }    }      $path = 'd:/技术文档 - 副本' ;     //要删除的文件夹     //如果php文件不是ANSI,而是UTF-8模式,而且要删除的文件夹中包含汉字字符的话,调用函数前需要转码   //$path=iconv( 'utf-8', 'gb2312',$path );     my_del( $path );  

例3,可查看成功之失败原因,代码如下:

<?php      functiondeletedir( $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 {      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 );      ?>    

在/var/www/test文件夹下建一写文件夹和文件测试    

shell>touchaaa    

shell>touchbbb    

shell>touchccc    

shell>toucheee    

shell>touchffff    

shell>mkdir111    

shell>mkdir222    

shell>mkdir333    

分别再在111,222,333文件夹下建写文件这里就不多说了,然后给他们权限    

shell>chown[url]www.www[/url]test-R

查看更多关于PHP递归删除文件与目录函数 - php文件操作的详细内容...

  阅读:63次