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中定义网站根目录的常用方法
Aug 08 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
从wamp到xampp的升级之路
Apr 08 PHP
54个提高PHP程序运行效率的方法
Jul 19 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
PHP实现的方程求解示例分析
Nov 11 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 PHP
PHP常用函数之base64图片上传功能详解
Oct 21 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翻页类
2009/06/01 PHP
php抽奖小程序的实现代码
2013/06/18 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
几个高效,简洁的字符处理函数
2007/04/12 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
2010/06/10 Javascript
jQuery中parentsUntil()方法用法实例
2015/01/07 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
JS实现水平移动与垂直移动动画
2019/12/19 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
vue使用svg文件补充-svg放大缩小操作(使用d3.js)
2020/09/22 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
Python编程实现双击更新所有已安装python模块的方法
2017/06/05 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
如何使用python代码操作git代码
2020/02/29 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
2020/06/28 Python
python中的yield from语法快速学习
2020/11/06 Python
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
国家助学金感谢信
2015/01/21 职场文书
大学生党员自我评价
2015/03/04 职场文书
感恩节寄语2015
2015/03/24 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
解析目标检测之IoU
2021/06/26 Python