PhoneGap中文网

 找回密码
 立即注册
查看: 16502|回复: 0
打印 上一主题 下一主题

php 删除指定文件夹

[复制链接]

87

主题

87

帖子

327

积分

中级会员

Rank: 3Rank: 3

积分
327
跳转到指定楼层
楼主
发表于 2017-7-26 09:24:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本文和大家分享的主要是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,这个不是什么问题)


来源:博客园

it营
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

ionic4视频教程

Archiver|手机版|小黑屋| PhoneGap中文网 ( 京ICP备13027796号-1 )  

GMT+8, 2024-11-27 06:29 , Processed in 0.045536 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表