PHP 删除文件 文件夹(级联)
作者:Benoy  时间:2011/3/3 邮箱:yayiba5@qq
问题:一个目录(复杂的目录,多个文件夹嵌套,文件夹里边还有多个文件).
目标: 删除这个目录,且目录下的一切都删除.
思路:先删除文件夹里边的文件,然后再删除空文件夹.
方法:递归删除
目录结构如下:(红是:文件夹  黑:文件)
---image
    ---我的照片
        ---a.jpg
        ---b.jpg
        ---个人肖像
            ---me.gif
            ---him.gif
    ---朋友照片
        ---其他文件夹
            ---.......
        ---..........
    ---同事照片
        ---空文件夹
        ---空2文件夹
        ---yy.jpg
        ---bbb.jpg
具体PHP函数列表
自定义函数
delFileByDir($dir)    删除文件夹中的所有文件
delDirByDir($dir)    删除文件中最后一层文件夹(注意:不是全部文件夹)
系统函数
scandir(String)    返回一个文件夹里边内容列表(包括文件和文件夹)
count(Array)        返回数组里边个数
php延时函数rmdir(String)        删除目录
unlink(String)        删除问文件
删除过程
    if(file_exists($sDir)){
            //先删除文件
            $this->delFileByDir($sDir);
            //删除文件夹(除了参数目录不删除外,里边所有的目录都删除)
            while(count(scandir($sDir))!=2)
            $this->delDirByDir($sDir);
            //删除参数目录
            $this->delDirByDir($sDir);
           
        }
具体函数:
//删除所有文件
  function delFileByDir($dir) 
  { 
          if(is_dir($dir)){
        $list = scandir($dir);
        if($list)
            foreach($list as $file){
                if($file!="."&&$file!=".."){
                    $tmp = $dir."/".$file;
                    if(is_dir($tmp)){
                        $this->delFileByDir($tmp);
                    }else{
                        @unlink($tmp);
                       
                    }
                }else{
                    continue;
                }
            }
        }else{
            @unlink($dir);
        }
  } 
//删除最后一个目录
function delDirByDir($dir) 
  { 
        $list = scandir($dir);
        if(count($list)>2){
            foreach($list as $file){
                if($file!='.'&&$file!='..'){
                    $tmp = $dir."/".$file;
                    $this->delDirByDir($tmp);
                   
                }
            }
           
        }else{
            @rmdir($dir);
        }
       
  } 
经过测试成功,不过没有经过严格的测试,有兴趣的朋友可以调试调试,完善一下,看的不是很明白的朋友,我就再举个删除文件夹的例子,文章开头我列出来个image(假如绝对路径是d:/image)目录,就这个了,使用很简单的。
if(file_exists("d:/image")){
            $this->delFileByDir("d:/image");
            while(count(scandir("d:/image"))!=2)
            $this->delDirByDir("d:/image");
            $this->delDirByDir("d:/image");
           
        }
作者:Benoy  时间:2011/3/3 邮箱:yayiba5@qq

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。