php专区

 首页 > php专区 > PHP高级 > 文件上传 > PHP递归删除文件与目录函数 - php文件操作

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

分享到:
【字体:
导读:
          在php中删除文件与目录rmdir()函数就可以搞定,但是要删除一个非空目录,将不能进行快速的删除,必须先将目录中文件删除,但是目录里可能还会有子目录所以要进行PHP递归删除目录 递归函...

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

在php中删除文件与目录rmdir()函数就可以搞定,但是要删除一个非空目录,将不能进行快速的删除,必须先将目录中文件删除,但是目录里可能还会有子目录所以要进行PHP递归删除目录.

递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行.

我们来看一个经典的递归删除函数,函数的作用:删除目录下面的所有文件,并删除目录.

函数代码如下:

  1. function deldir($dirname){   
  2.     if(file_exists($dirname)){//首先判断目录是否有效   
  3.         $dir = opendir($dirname);//用opendir打开目录   
  4.         while($filename = readdir($dir)){//使用readdir循环读取目录里的内容   
  5.          if($filename != "." && $filename != ".."){//排除"."和".."这两个特殊的目录   
  6.             $file = $dirname."/".$filename;   
  7.             if(is_dir($file)){//判断是否是目录,如果是则调用自身   
  8.                 deldir($file); //使用递归删除子目录     
  9.             }else{   
  10.               @unlink($file);//删除文件   
  11.             }   
  12.           }   
  13.         }   
  14.             closedir($dir);//关闭文件操作句柄   
  15.             rmdir($dirname);//删除目录   
  16.     }   
  17. }   
  18. ?> 

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

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

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

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

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

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

  1. <?php     
  2. functiondeletedir($dir){     
  3. if(!handle=@opendir($dir)){//检测要打开目录是否存在     
  4. die("没有该目录");     
  5. }     
  6. while(false!==($file=readdir($handle))){     
  7. if($file!=="."&&$file!==".."){//排除当前目录与父级目录     
  8. $file=$dir.DIRECTORY_SEPARATOR.$file;     
  9. if(is_dir($file)){     
  10. deletedir($file);     
  11. }else{     
  12. if(@unlink($file)){     
  13. echo"文件$file删除成功。
    "
    ;     
  14. }else{     
  15. echo"文件$file删除失败!
    "
    ;     
  16. }     
  17. }     
  18. }     
  19. if(@rmdir($dir)){     
  20. echo"目录$dir删除成功了。
    n"
    ;     
  21. }else{     
  22. echo"目录$dir删除失败!
    n"
    ;     
  23. }     
  24. }     
  25.    
  26. //测试程序     
  27. $dir="/var/www/test";     
  28. deletedir($dir);     
  29. ?>    

在/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文件操作
php读取大文件实例代码 在php开发中,经常遇到要读取一些文件,最简便的方法莫过于使用一些如file、file_get_contents之类的函数,简简单单的几行代码就能轻松的搞定,但当需要操作的文件是一个比较大的文件时,这些函数可能就显的力不从心,下面将从一个需求入手来说明对于读取大文件时,常用的操...
php遍历目录与文件夹的几种方法 - php文...
php遍历目录与文件夹的几种方法 遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的,PHP本身也提供了很多非常有用的函数,正确地使用它们,不会有错,下面就我个人学习过程中的一些总结. 本函数可以列出指定目录下所有的文件,包括子目录下的,代码如下: functi...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……