当前位置:首页 > PHP教程 > php文件操作 > 列表

PHP实现递归循环每一个目录程序

发布:smiling 来源: PHP粉丝网  添加日期:2014-01-16 14:11:13 浏览: 评论:0 

要遍历一个文件夹里面的所有目录,列出里面所有的文件,PHP本身自带的有一个readdir的函数,不过只能读取当前的目录,根据这个函数,我写了另外一个函数,用来实现我的需求,代码如下:

  1. <?php 
  2. class listdir{ 
  3. var $depth
  4. var $dirname
  5. var $list
  6. var $tostring
  7. function listdir($dir){ 
  8. $this->dirname=$dir
  9. $this->depth=0; 
  10. $this->tostring=”"; 
  11. //把结果保存进多维数组 
  12. function getlist($dir=”"){ 
  13. if($dir==”")$dir=$this->dirname; 
  14. $d=@dir($dir); 
  15. while(false!==($item=$d->read())) 
  16. if($item!=”.”&&$item!=”..”) 
  17. $path=$dir.”/”.$item
  18. if(is_dir($path)){ 
  19. $this->depth+=1; 
  20. $this->getlist($path); 
  21. }else
  22. $this->list[$this->depth][]=$item
  23. $this->list[$this->depth]['directory']=$dir
  24. $this->depth-=1; 
  25. $d->close(); 
  26. return $this->list; 
  27. //字符窜化结果 
  28. function tostring($dir=”"){ 
  29. if($dir==”")$dir=$this->dirname; 
  30. $d=@dir($dir); 
  31. $this->tostring.=”<UL>n”; 
  32. $this->tostring.=”Directory:”.$dir.”n”; 
  33. while(false!==($item=$d->read())) 
  34. if($item!=”.”&&$item!=”..”) 
  35. $path=$dir.”/”.$item
  36. if(is_dir($path)){ 
  37. $this->depth+=1; 
  38. $this->tostring($path); 
  39. }else
  40. $this->tostring.=”<LI>”.$item.”</LI>n”; 
  41. $this->depth-=1; 
  42. $d->close(); 
  43. $this->tostring.=”</UL>n”; 
  44. return $this->tostring; 
  45. $wapdir=”jquery”; 
  46. $d=new listdir($wapdir); 
  47. echo $d->tostring(); 
  48. ?> 

要删除一个空的目录很简单~一个,rmdir() 函数就可以搞定,但是要删除一个非空目录,将不能进行快速的删除,必须先将目录中文件删除,但是目录里可能还会有子目录所以要进行递归删除~下面是我的例子~代码如下:

  1. <?php 
  2. function deletedir($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 "文件<b>$file</b>删除成功。<br>"
  14.                                   }else
  15.                                           echo  "文件<b>$file</b>删除失败!<br>"
  16.                                  } 
  17.                 } 
  18.      } 
  19.     if(@rmdir($dir)){ 
  20.            echo "目录<b>$dir</b>删除成功了。<br>n"
  21.     }else
  22.            echo "目录<b>$dir</b>删除失败!<br>n"
  23.   } 
  24.  
  25. //测试程序 
  26. $dir="/var/www/test"
  27. deletedir($dir); 
  28. ?> 

Tags: 实现 递归 循环

分享到: