在php中删除文件与目录rmdir()函数就可以搞定,但是要删除一个非空目录,将不能进行快速的删除,必须先将目录中文件删除,但是目录里可能还会有子目录所以要进行PHP递归删除目录.
递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行.
我们来看一个经典的递归删除函数,函数的作用:删除目录下面的所有文件,并删除目录.
函数代码如下:
- <?php
- function deldir($dirname){
- if(file_exists($dirname)){
- $dir = opendir($dirname);
- while($filename = readdir($dir)){
- if($filename != "." && $filename != ".."){
- $file = $dirname."/".$filename;
- if(is_dir($file)){
- deldir($file);
- }else{
- @unlink($file);
- }
- }
- }
- closedir($dir);
- rmdir($dirname);
- }
- }
- ?>
使用实例:Public是一个文件夹,里面有许多文件夹和文件,调用deldir($dirname)把它删除.
- <?php
- $dir='Public';
- deldir($dir);
- ?>
说明:首先判断Public是否存在,如果在则打开Public,然后使用readdir循环读取Public目录里的内容,如果存在"."和".."这两个特殊目录则排除掉,如果遇到文件夹则调用自身处理,直到条件不满足,遇到文件则直接删除掉,最后层层跳出删除Public.
实例二,删除非空目录,代码如下:
-
-
-
- function my_del($path)
- {
- if(is_dir($path))
- {
- $file_list= scandir($path);
- foreach ($file_list as $file)
- {
- if( $file!='.' && $file!='..')
- {
- my_del($path.'/'.$file);
- }
- }
- @rmdir($path);
- }
- else
- {
- @unlink($path);
- }
-
- }
-
-
- $path='d:/技术文档 - 副本';
-
-
-
-
- my_del($path);
例3,可查看成功之失败原因,代码如下:
- <?php
- 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"文件<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);
- ?>
在/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 |