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 相关文章推荐
重新封装zend_soap实现http连接安全认证的php代码
Jan 12 PHP
php编写一个简单的路由类
Apr 13 PHP
使用PHP获取汉字的拼音(全部与首字母)
Jun 27 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
PHP抓取、分析国内视频网站的视频信息工具类
Apr 02 PHP
php数组使用规则分析
Feb 27 PHP
WIFI万能钥匙密码查询接口实例
Sep 28 PHP
大家须知简单的php性能优化注意点
Jan 04 PHP
PHP结合Ueditor并修改图片上传路径
Oct 16 PHP
PHP中的self关键字详解
Jun 23 PHP
关于PhpStorm设置点击编辑文件自动定位源文件的实现方式
Dec 30 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
substr()函数中文版
2006/10/09 PHP
MySQL修改密码方法总结
2008/03/25 PHP
获取远程文件大小的php函数
2010/01/11 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
php开发时容易忘记的一些技术细节
2016/02/03 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
js 与或运算符 || &amp;&amp; 妙用
2009/12/09 Javascript
纯js写的分页表格数据为json串
2014/02/18 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python实现从百度API获取天气的方法
2015/03/11 Python
Python MySQLdb Linux下安装笔记
2015/05/09 Python
Django使用unittest模块进行单元测试过程解析
2019/08/02 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
艺术设计专业个人求职信
2014/04/10 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
高三霸气励志标语
2014/06/24 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
个人求职意向书
2015/05/11 职场文书
mysql连接查询中and与where的区别浅析
2021/07/01 MySQL
不负正版帝国之名 《重返帝国》引领SLG手游制作新的标杆
2022/04/07 其他游戏
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技