php 删除指定文件夹的实例讲解


Posted in PHP onJuly 25, 2017

1、前言

目标:php删除一个指定目录

所使用的的php函数:is_dir,opendir,readdir,scandir,rmdir,closedir,等等(注:其他文件操作函数也可以完成,这里只列举了本次使用的函数)

2、相关函数介绍

php文件操作的方法大致相同,已经在上一篇介绍过了,这里就不在重复介绍,这里就介绍一个新函数

rmdir

php 删除指定文件夹的实例讲解

详情参考:http://www.w3school.com.cn/php/func_filesystem_rmdir.asp

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);//删除空目录 
}

然而,上面的代码遇到子目录层级高的时候,就容易出现一个警告,导致目录无法删除

php 删除指定文件夹的实例讲解

故对于层级高的子集,需要在最后加上一个循环判断,来判断是否可以删除,来避免这个错误

// //关掉资源,删除目录
// closedir($dh);//关闭目录资源 
// fwrite($file,"{$dirName}清理完成\r\n");
//rmdir($dirName);//删除空目录 
 
//每次目录层级高了就报错,故加个循环处理
$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,这个不是什么问题)

以上这篇php 删除指定文件夹的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
PHP UTF8编码内的繁简转换类
Jul 20 PHP
PHP 裁剪图片成固定大小代码方法
Sep 09 PHP
LotusPhp笔记之:Cookie组件的使用详解
May 06 PHP
linux下编译安装memcached服务
Aug 03 PHP
浅谈php自定义错误日志
Feb 13 PHP
YII使用url组件美化管理的方法
Dec 28 PHP
PHP实现的oracle分页函数实例
Jan 25 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
Lumen timezone 时区设置方法(慢了8个小时)
Jan 20 PHP
PHP函数按引用传递参数及函数可选参数用法示例
Jun 04 PHP
php设计模式之装饰模式应用案例详解
Jun 17 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 #PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 #PHP
PHP实现的登录页面信息提示功能示例
Jul 24 #PHP
PHP检查网站是否宕机的方法示例
Jul 24 #PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 #PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 #PHP
php实现和c#一致的DES加密解密实例
Jul 24 #PHP
You might like
ionCube 一款类似zend的PHP加密/解密工具
2010/07/25 PHP
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
PDO::exec讲解
2019/01/28 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
Javascript 中介者模式实例
2009/12/16 Javascript
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
JavaScript闭包详解
2015/02/02 Javascript
详细解读JavaScript编程中的Promise使用
2015/07/27 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
解决vue-router进行build无法正常显示路由页面的问题
2018/03/06 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
JavaScript实现简单的弹窗效果
2020/05/19 Javascript
vuex刷新后数据丢失的解决方法
2020/10/18 Javascript
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
python绘图库Matplotlib的安装
2014/07/03 Python
python使用super()出现错误解决办法
2017/08/14 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
python 字符串追加实例
2019/07/20 Python
Django时区详解
2019/07/24 Python
Django实现文件上传下载
2019/10/06 Python
python 如何上传包到pypi
2020/12/24 Python
python常量折叠基础知识点讲解
2021/02/28 Python
意大利中国电子产品购物网站:Geekmall.com
2019/09/30 全球购物
传统软件工程与面向对象的软件工程有什么区别
2012/05/31 面试题
毕业自我鉴定范文
2013/11/06 职场文书
会计人员岗位职责
2014/03/19 职场文书
提档介绍信范文
2015/10/22 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书
创业计划书之酒厂
2019/10/14 职场文书
php字符串倒叙
2021/04/01 PHP
解析mybatis-plus中的resultMap简单使用
2021/11/23 Java/Android
Win11跳过联网界面创建本地管理账户的3种方法
2022/04/20 数码科技