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 数组和字符串互相转换实现方法
Mar 26 PHP
php设计模式之命令模式的应用详解
May 21 PHP
深入PHP操作MongoDB的技术总结
Jun 02 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
php调用mysql存储过程实例分析
Dec 29 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
Feb 03 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
PHP+redis实现微博的拉模型案例详解
Jul 10 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
Yii框架函数简单用法分析
Sep 09 PHP
TP5框架安全机制实例分析
Apr 05 PHP
PHP 对象继承原理与简单用法示例
Apr 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类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
解决extjs在firefox中关闭窗口再打开后iframe中js函数访问不到的问题
2008/11/06 Javascript
jQuery bxCarousel实现图片滚动切换效果示例代码
2013/05/15 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
vue高德地图之玩转周边
2017/06/16 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
解析Angular 2+ 样式绑定方式
2018/01/15 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
python实现计算资源图标crc值的方法
2014/10/05 Python
Swift中的协议(protocol)学习教程
2016/07/08 Python
Python中的浮点数原理与运算分析
2017/10/12 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
Python 获取指定文件夹下的目录和文件的实现
2019/08/30 Python
简单了解python数组的基本操作
2019/11/26 Python
Python包和模块的分发详细介绍
2020/06/19 Python
Django后端分离 使用element-ui文件上传方式
2020/07/12 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
用纯CSS3实现网页中常见的小箭头
2017/10/16 HTML / CSS
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
曼城官方网上商店:Manchester City
2019/09/10 全球购物
EJB2和EJB3在架构上的不同点
2014/09/29 面试题
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
拉丁舞学习者的自我评价
2013/10/27 职场文书
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
三字经教学反思
2014/04/26 职场文书
禁毒宣传活动总结
2014/08/26 职场文书
群众路线对照检查剖析材料
2014/10/09 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL
MySQL连接控制插件介绍
2021/09/25 MySQL
python基础之函数的定义和调用
2021/10/24 Python