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中的字符串函数
Nov 24 PHP
linux下删除7天前日志的代码(php+shell)
Jan 02 PHP
说说PHP的autoLoad自动加载机制
Sep 27 PHP
PHP中多维数组的foreach遍历示例
Jun 13 PHP
php cookie名使用点号(句号)会被转换
Oct 23 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
Sep 26 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
php实例化一个类的具体方法
Sep 19 PHP
php解决约瑟夫环算法实例分析
Sep 30 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 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 explode函数实例代码
2012/02/27 PHP
PHP人民币金额数字转中文大写的函数代码
2013/02/27 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
使用JavaScript动态设置样式实现代码及演示动画
2013/01/25 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
Angular4编程之表单响应功能示例
2017/12/13 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
微信小程序实现滑动翻页效果(完整代码)
2019/12/06 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
Python实现多行注释的另类方法
2014/08/22 Python
Python处理PDF及生成多层PDF实例代码
2017/04/24 Python
python将回车作为输入内容的实例
2018/06/23 Python
YUV转为jpg图像的实现
2019/12/09 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
2020/01/04 Python
浅析python中的del用法
2020/09/02 Python
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
2019史上最全Database工程师题库
2015/12/06 面试题
加多宝凉茶广告词
2014/03/18 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
2014年双拥工作总结
2014/11/21 职场文书
2015新教师教学工作总结
2015/07/22 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
nginx内存池源码解析
2021/11/20 Servers
2007年老电脑安装win11会怎么样? 网友实测win11在老电脑运行良好
2021/11/21 数码科技
Java 多态分析
2022/04/26 Java/Android