我想删除一个目录下的目录及文件,但保留最上阶目录. 如何说, 要删除/upload/下的所有目录及文件,但保留/upload目录.
下面函数会把/upload目录也删除function delDir($dir) {
//先删除目录下的文件:
$dh=opendir($dir);
while ($file=readdir($dh)) {
if($file!="." && $file!="..") {
$fullpath=$dir."/".$file;
if(!is_dir($fullpath)) {
unlink($fullpath);
} else {
delDir($fullpath);
}
}
} closedir($dh);
//删除当前文件夹:
if(rmdir($dir)) {
return true;
} else {
return false;
}
}

解决方案 »

  1.   

    注释上有写:
    //删除当前文件夹:
    /*    if(rmdir($dir)) {
            return true;
        } else {
            return false;
        }
    */
      

  2.   

    function delDir($dir) {
        //先删除目录下的文件:
        $dh=opendir($dir);
        while ($file=readdir($dh)) {
            if($file!="." && $file!="..") {
                $fullpath=$dir."/".$file;
                if(!is_dir($fullpath)) {
                    unlink($fullpath);
                } else {
                    delDir($fullpath);
                }
            }
        }    closedir($dh);}
      

  3.   

    function delDir($dir) {
      $t = array();
      $dh = opendir($dir);
      while ($file=readdir($dh)) {
        if($file!="." && $file!="..") {
          $fullpath=$dir."/".$file;
          if(!is_dir($fullpath)) {
            unlink($fullpath);
          } else {
            delDir($fullpath);
            $t[] = $fullpath;//由于目录被占用,不能删除。保存起来
          }
        }
      }
      closedir($dh);
      if($t) array_map('rmdir', $t);//删除所有的子目录
    }
      

  4.   

    1#楼,2#楼
    把后面的rmdir($dir)删除掉,目录下的文件夹是不删除的.只删除文件.3#楼
    斑竹的代码可行,我测试下.
      

  5.   

    或者在删除目录的时候 判断 是不是upload 是的话不删除
      

  6.   

    斑竹,请问如何判断删除成功呢?如果删除成功,返回ture, 否则返回false
      

  7.   

    按三楼斑竹的函数,不知道如何判断array_map()执行是否成功删除. 请问怎么判断? 如果成功才执行下一步如果没办法, 只能再次检查目录是否为空.如为空说明成功删除,再执行一步.
      

  8.   

    在你原函数中
                } else {
                    delDir($fullpath);//这里并没有承接delDir的返回值
                }
    返回是没有意义的。所以我没有书写返回如需要返回要这样做function delDir($dir) {
      $t = array();
      $r = true;
      $dh = opendir($dir);
      while ($file=readdir($dh)) {
        if($file!="." && $file!="..") {
          $fullpath=$dir."/".$file;
          if(!is_dir($fullpath)) {
            unlink($fullpath);
          } else {
            $r &= delDir($fullpath);
            $t[] = $fullpath;//由于目录被占用,不能删除。保存起来
          }
        }
      }
      closedir($dh);
      if($t) foreach($t as $f) $r &= rmdir($f);//删除所有的子目录
      return $r;
    }
    如果删除失败有操作的话,你还需添加代码