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); ?>
教程地址:http://www.phprm.com/wenjian/fs1405.html
欢迎转载!但请带上文章地址^^