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 相关文章推荐
1.PHP简介
Oct 09 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
PHP实现简单汉字验证码
Jul 28 PHP
ThinkPHP进程计数类Process用法实例详解
Sep 25 PHP
php实现面包屑导航例子分享
Dec 19 PHP
php基于PDO连接MSSQL示例DEMO
Jul 13 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 PHP
PHP实现浏览器格式化显示XML的方法示例
Jan 22 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
PHP并发场景的三种解决方案代码实例
Feb 27 PHP
PHP7 弃用功能
Mar 09 PHP
如何用PHP实现多线程编程
May 26 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
使用php将某个目录下面的所有文件罗列出来的方法详解
2013/06/21 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
浅析PHP7 的垃圾回收机制
2019/09/06 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
自动生成文章摘要的代码[JavaScript 版本]
2007/03/20 Javascript
改版了网上的一个js操作userdata
2007/04/27 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
基于JavaScript实现表格滚动分页
2017/11/22 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
微信小程序版本自动更新的方法
2019/06/14 Javascript
在Python中执行系统命令的方法示例详解
2017/09/14 Python
简单了解python PEP的一些知识
2019/07/13 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
python RSA加密的示例
2020/12/09 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
什么是数据抽象
2016/11/26 面试题
大学生自荐书范文
2013/12/10 职场文书
打架检讨书500字
2014/01/29 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
同意离婚答辩状
2015/05/22 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis