在php中删除文件与目录rmdir()函数就可以搞定,但是要删除一个非空目录,将不能进行快速的删除,必须先将目录中文件删除,但是目录里可能还会有子目录所以要进行PHP递归删除目录
递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行。
我们来看一个经典的递归删除函数
函数的作用:删除目录下面的所有文件,并删除目录
函数代码:
代码如下 | 复制代码 |
function deldir($dirname){ 使用实例:Public是一个文件夹,里面有许多文件夹和文件,调用deldir($dirname)把它删除
$dir='Public';//传入一个文件夹路径 |
说明:首先判断Public是否存在,如果在则打开Public,然后使用readdir循环读取Public目录里的内容,如果存在"."和".."这两个特殊目录则排除掉。如果遇到文件夹则调用自身处理,直到条件不满足。遇到文件则直接删除掉。最后层层跳出删除Public。
实例二,删除非空目录
代码如下 | 复制代码 |
/* }
//如果php文件不是ANSI,而是UTF-8模式,而且要删除的文件夹中包含汉字字符的话,调用函数前需要转码 my_del($path); |
例3,可查看成功之失败原因
代码如下 | 复制代码 |
functiondeletedir($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"文件$file删除成功。 "; }else{ echo"文件$file删除失败! "; } } } if(@rmdir($dir)){ echo"目录$dir删除成功了。 n"; }else{ echo"目录$dir删除失败! n"; } } //测试程序 $dir="/var/www/test"; deletedir($dir); ?> |
在/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