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 discuz 主题表和回帖表的设计
Mar 13 PHP
php disk_free_space 返回目录可用空间
May 10 PHP
PHP得到mssql的存储过程的输出参数功能实现
Nov 23 PHP
php实现获取及设置用户访问页面语言类
Sep 24 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
php实现网站顶踩功能的完整前端代码
Jul 19 PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 PHP
PHP实现的DES加密解密实例代码
Apr 06 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
Nov 23 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 PHP
PHP替换Word中变量并导出PDF图片的实现方法
Nov 26 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遍历目录viewDir函数
2009/12/15 PHP
php除数取整示例
2014/04/24 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
php利用递归实现删除文件目录的方法
2016/09/23 PHP
JavaScript实现Sleep函数的代码
2007/03/04 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
2010/07/13 Javascript
javascript中eval函数用法分析
2015/04/25 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
JavaScript encodeURI 和encodeURIComponent
2015/12/04 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
使用jquery给指定的table动态添加一行、删除一行
2016/10/13 Javascript
vue 微信授权登录解决方案
2018/04/10 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
Python中的类与类型示例详解
2019/07/10 Python
python:动态路由的Flask程序代码
2019/11/22 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
加拿大大码女装购物网站:Penningtons
2020/12/26 全球购物
华为C++笔试题
2014/08/05 面试题
工作室成员个人发展规划范文
2014/01/24 职场文书
产品质量承诺范本
2014/03/31 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书