PhoneGap中文网

标题: php 删除指定文件夹 [打印本页]

作者: w8484855@qq.com    时间: 2017-7-26 09:24
标题: php 删除指定文件夹
本文和大家分享的主要是php删除指定文件夹相关内容,一起来看看吧,希望对大家学习php有所帮助。
  1、前言
  目标:php删除一个指定目录
  所使用的的php函数:is_diropendirreaddirscandirrmdirclosedir,等等(注:其他文件操作函数也可以完成,这里只列举了本次使用的函数)
  2、相关函数介绍
  php文件操作的方法大致相同,已经在上一篇介绍过了,这里就不在重复介绍,这里就介绍一个新函数
  rmdir


3、代码构成
  **
  * [delAllFile description] 删除指定目录
  * @param  [type]  $dirName [description] 目录
  * @param  [type]  $file    [description] 记录的过程文件
  * @param  integer $type    [description] 第一次默认打开新文件,第二次调用不打开
  * @return [type]           [description]
  */public function delAllFile($dirName, $file, $type = 1) {
  $re = $this->checkDir($dirName);
  //默认第一次打开文件
  if($type){
  $file = fopen($file, 'w');//打开日志文件
  }
  if($re){
  $this->delFile($dirName, $file);
  }else{
  fwrite($file,"{$dirName}清理完成\r\n");
  }
  }
  /**
  * [checkDir description] 检测文件夹是否为空,为空直接删除
  * @param  [type] $dirName [description]  文件夹名
  * @return [type]          [description]
  */private function checkDir($dirName) {
  $a = scandir($dirName);//列出 images 目录中的文件和目录:
  //只包含...目录的文件夹为空文件夹
  if(sizeof($a) == 2){
  rmdir($dirName);
  return false;
  }
  return true;
  }/**
  * [delFile description]  上传文件的方法
  * @param  [type] $dirName [description] 目录
  * @param  [type] $file    [description] 记录的文件
  * @return [type]          [description]
  */private function delFile($dirName, $file) {
  $dh = openDir($dirName);
  while($handle = readdir($dh)){
  if($handle == '.' || $handle == '..') {
  continue;
  }
  $resource = $dirName.'/'.$handle;
  //判断是否是文件夹
  if(is_dir($resource)) {
  //判断文件夹是否为空
  $re = $this->checkDir($dirName);
  if($re){
  $this->delAllFile($resource, $file, 0);
  }else{
  fwrite($file,"{$resource}清理完成\r\n");
  continue;
  }
  }else{
  unlink($resource);
  }
  }
  //关掉资源,删除目录
  closedir($dh);//关闭目录资源
  fwrite($file,"{$dirName}清理完成\r\n");
  rmdir($dirName);//删除空目录
  }
  然而,上面的代码遇到子目录层级高的时候,就容易出现一个警告,导致目录无法删除


故对于层级高的子集,需要在最后加上一个循环判断,来判断是否可以删除,来避免这个错误
// //关掉资源,删除目录
// closedir($dh);//关闭目录资源
// fwrite($file,"{$dirName}清理完成\r\n");
//rmdir($dirName);
//删除空目录
  //每次目录层级高了就报错,故加个循环处理$i = 1;while($i){
  $i = 1;
while($i){
    $re = $this->checkDir($dirName);
    echo "$dirName $i <br/><hr/>";
    $i++;
    if(!$re){
        $i = 0;
        closedir($dh);//关闭目录资源
        fwrite($file,"{$dirName}清理完成\r\n");     
    }
}
  加上这层可以避免无法删除的情况(有时候删不掉是权限的问题)
  4、结语
  删除一个目录相对比较简单,基本步骤为:
  1、判断是否是目录,是目录则递归调用自己,否则直接删除文件;
  2、判断目录是否为空,不为空 rmdir会抛出错误;
  3、文件权限的问题(window,这个不是什么问题)


来源:博客园






欢迎光临 PhoneGap中文网 (http://bbs.phonegap100.com/) Powered by Discuz! X3.2