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 14 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
Feb 16 PHP
PHP学习之字符串比较和查找
Apr 17 PHP
PHP中error_reporting()用法详解
Aug 31 PHP
php邮件发送的两种方式
Apr 28 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
PHP页面输出搜索后跳转下一页的处理方法
Sep 30 PHP
PHP获取真实客户端的真实IP
Mar 07 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
PHP中递归的实现实例详解
Nov 14 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 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实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
yii2安装详细流程
2018/05/23 PHP
ThinkPHP5框架缓存查询操作分析
2018/05/30 PHP
PHP 文件上传限制问题
2019/09/01 PHP
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
js手动播放图片实现图片轮播效果
2016/09/17 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
原生JS封装拖动验证滑块的实现代码示例
2020/06/01 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
[49:17]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第三场 1月26日
2021/03/11 DOTA
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
浅析Python中的多进程与多线程的使用
2015/04/07 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python+MongoDB自增键值的简单实现
2016/11/04 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
使用python list 查找所有匹配元素的位置实例
2019/06/11 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
浅谈Python中的字符串
2020/06/10 Python
浅谈Selenium+Webdriver 常用的元素定位方式
2021/01/13 Python
联想韩国官网:Lenovo Korea
2018/05/10 全球购物
Electrolux伊莱克斯巴西商店:家用电器、小家电和配件
2018/05/23 全球购物
Linux的文件类型
2016/07/05 面试题
什么是lambda函数
2013/09/17 面试题
搞笑创意广告语
2014/03/17 职场文书
班委竞选演讲稿
2014/04/28 职场文书
幼儿园托班开学寄语(2016秋季)
2015/12/03 职场文书
Node-Red实现MySQL数据库连接的方法
2021/08/07 MySQL
Java移除无效括号的方法实现
2021/08/07 Java/Android
Redis三种集群模式详解
2021/10/05 Redis