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 相关文章推荐
ADODB类使用
Nov 25 PHP
用PHP写的MySQL数据库用户认证系统代码
Mar 22 PHP
dede全站URL静态化改造[070414更正]
Apr 17 PHP
php array_intersect比array_diff快(附详细的使用说明)
Jul 03 PHP
使用PHPMyAdmin修复论坛数据库的图文方法
Jan 09 PHP
解析php入库和出库
Jun 25 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
php中并发读写文件冲突的解决方案
Oct 25 PHP
从PHP的源码中深入了解stdClass类
Apr 18 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
Aug 23 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 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实现httpclient类示例
2014/04/08 PHP
smarty简单入门实例
2014/11/28 PHP
PHP实现上一篇下一篇的方法实例总结
2016/09/22 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
jQuery中delegate与on的用法与区别示例介绍
2013/12/20 Javascript
网页收藏夹显示ICO图标(代码少)
2015/08/04 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
Vue.js父与子组件之间传参示例
2017/02/28 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
Python实现的双色球生成功能示例
2017/12/18 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
pytorch实现Tensor变量之间的转换
2020/02/17 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
编写python代码实现简单抽奖器
2020/10/20 Python
HTML5制作表格样式
2016/11/15 HTML / CSS
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
护理学应聘自荐书范文
2014/02/05 职场文书
小学生手册家长评语
2014/04/16 职场文书
大学迎新生标语
2014/10/06 职场文书
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL
利用Apache Common将java对象池化的问题
2022/06/16 Servers