PHP实现递归循环每一个目录程序
要遍历一个文件夹里面的所有目录,列出里面所有的文件,PHP本身自带的有一个readdir的函数,不过只能读取当前的目录,根据这个函数,我写了另外一个函数,用来实现我的需求,代码如下:
- <?php
- class listdir{
- var $depth;
- var $dirname;
- var $list;
- var $tostring;
- function listdir($dir){
- $this->dirname=$dir;
- $this->depth=0;
- $this->tostring=”";
- }
-
- function getlist($dir=”"){
- if($dir==”")$dir=$this->dirname;
- $d=@dir($dir);
- while(false!==($item=$d->read()))
- {
- if($item!=”.”&&$item!=”..”)
- {
- $path=$dir.”/”.$item;
- if(is_dir($path)){
- $this->depth+=1;
- $this->getlist($path);
- }else{
- $this->list[$this->depth][]=$item;
- }
- }
- }
- $this->list[$this->depth]['directory']=$dir;
- $this->depth-=1;
- $d->close();
- return $this->list;
- }
-
- function tostring($dir=”"){
- if($dir==”")$dir=$this->dirname;
- $d=@dir($dir);
- $this->tostring.=”<UL>n”;
- $this->tostring.=”Directory:”.$dir.”n”;
- while(false!==($item=$d->read()))
- {
- if($item!=”.”&&$item!=”..”)
- {
- $path=$dir.”/”.$item;
- if(is_dir($path)){
- $this->depth+=1;
- $this->tostring($path);
- }else{
- $this->tostring.=”<LI>”.$item.”</LI>n”;
- }
- }
- }
- $this->depth-=1;
- $d->close();
- $this->tostring.=”</UL>n”;
- return $this->tostring;
- }
- }
- $wapdir=”jquery”;
- $d=new listdir($wapdir);
- echo $d->tostring();
- ?>
要删除一个空的目录很简单~一个,rmdir() 函数就可以搞定,但是要删除一个非空目录,将不能进行快速的删除,必须先将目录中文件删除,但是目录里可能还会有子目录所以要进行递归删除~下面是我的例子~代码如下:
- <?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{
- 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);
- ?>