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 相关文章推荐
ExtJS与PHP、MySQL实现存储的方法
Apr 02 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 PHP
用穿越火线快速入门php面向对象
Feb 22 PHP
php对数组排序的简单实例
Dec 25 PHP
使用php清除bom示例
Mar 03 PHP
在Yii框架中使用PHP模板引擎Twig的例子
Jun 13 PHP
php调用新浪短链接API的方法
Nov 08 PHP
php中的动态调用实例分析
Jan 07 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
Laravel向公共模板赋值方法总结
Jun 25 PHP
详解no input file specified 三种解决方法
Nov 29 PHP
Cookie跨域问题解决方案代码示例
Nov 24 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输出控制功能在简繁体转换中的应用
2006/10/09 PHP
PHP session有效期问题
2009/04/26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
2014/06/24 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
键盘控制事件应用教程大全
2006/11/24 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
LABjs、RequireJS、SeaJS的区别
2014/03/04 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
jQuery中each循环的跳出和结束实例
2017/08/16 jQuery
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
VUE 实现复制内容到剪贴板的两种方法
2019/04/24 Javascript
vue动态绑定class的几种常用方式小结
2019/05/21 Javascript
vue router总结 $router和$route及router与 router与route区别
2019/07/05 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
在Python中用get()方法获取字典键值的教程
2015/05/21 Python
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
python 以16进制打印输出的方法
2018/07/09 Python
Python小进度条显示代码
2019/03/05 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
Python实现自动签到脚本功能
2020/08/20 Python
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
毕业生就业协议书
2014/04/11 职场文书
班级团队活动方案
2014/08/14 职场文书
营销计划书范文
2015/01/17 职场文书
Python 图片添加美颜效果
2022/04/28 Python
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js
Django框架之路由用法
2022/06/10 Python