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读取目录下所有文件的代码
Jan 07 PHP
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
Nov 18 PHP
在PHP中操作Excel实例代码
Apr 29 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
PHP处理会话函数大总结
Aug 05 PHP
PHP编写简单的App接口
Aug 28 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
分享5个非常有用的Laravel Blade指令
May 30 PHP
php上传后台无法收到数据解决方法
Oct 28 PHP
如何通过Apache在本地配置多个虚拟主机
Jul 29 PHP
PHP生成随机密码4种方法及性能对比
Dec 11 PHP
php的单例模式及应用场景详解
Feb 27 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
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
sogou地图API用法实例教程
2014/09/11 Javascript
jQuery对val和atrr(&quot;value&quot;)赋值的区别介绍
2014/09/26 Javascript
js提交form表单,并传递参数的实现方法
2016/05/25 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
基于javascript处理nginx请求过程详解
2020/07/07 Javascript
[42:25]EG vs Spirit Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
python 实现文件的递归拷贝实现代码
2012/08/02 Python
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
Python字符串匹配算法KMP实例
2015/07/18 Python
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
Python实现将HTML转换成doc格式文件的方法示例
2017/11/20 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
2018/05/25 Python
python使用KNN算法识别手写数字
2019/04/25 Python
Django Aggregation聚合使用方法解析
2019/08/01 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
python多进程间通信代码实例
2019/09/30 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
45个非常奇妙的CSS3 特性应用示例
2012/01/01 HTML / CSS
Shopee新加坡:东南亚与台湾电商平台
2019/01/25 全球购物
大学应届生求职简历的自我评价
2013/10/08 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
中专生自我鉴定范文
2014/02/02 职场文书
八一慰问活动方案
2014/02/07 职场文书
工作检讨书500字
2014/10/19 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书