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
欢迎转载!但请带上文章地址^^