php 删除指定文件夹

1、前言

目标:php删除一个指定目录

所使用的的php函数:is_dir,opendir,readdir,scandir,rmdir,closedir,等等(注:其他文件操作函数也可以完成,这里只列举了本次使用的函数)

2、相关函数介绍

php文件操作的方法大致相同,已经在上一篇介绍过了,这里就不在重复介绍,这里就介绍一个新函数

rmdir

详情参考:http://www.w3school.com.cn/php/func_filesystem_rmdir.asp

其他函数请参考上一篇: http://www.cnblogs.com/ImCehnyx/p/7214598.html

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);//删除空目录
}

然而,上面的代码遇到子目录层级高的时候,就容易出现一个警告,导致目录无法删除

故对于层级高的子集,需要在最后加上一个循环判断,来判断是否可以删除,来避免这个错误

// //关掉资源,删除目录
// 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 删除指定文件夹的更多相关文章

  1. PHP批量清空删除指定文件夹内容

    PHP批量清空删除指定文件夹内容: cleancache.php <?php // 清文件缓存 $dirs = array( realpath(dirname(__FILE__) . '/../ ...

  2. FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有

    2018-11-05  19:42:08开始写 选择 删除 1.FileUtils.java类 import java.io.File;//导入包 import java.util.List;//导入 ...

  3. Java:<获取>、<删除>指定文件夹及里面所有文件

    工具类代码如下: 一.获取 public Class Test{ //定义全局变量,存放所有文件夹下的文档 List<String> fileList ; public List<S ...

  4. git删除指定文件夹

    1.在本地仓库删除指定文件 git rm 文件名名称 2.在本地仓库删除指定文件夹 git rm -r 文件夹/ 3.提交修改 git commit -m"删除文件夹" 4.推送到 ...

  5. bat 延时删除指定文件夹中的文件经验分享

    1.bat延时 xp程序中通过ping 127.0.0.1 -n 20 来实现延时操作,ping本地地址20行. win7中通过timeout 20 来实现延时20秒. 2.删除指定文件 del /q ...

  6. c#删除指定文件夹中今天之前的文件

    1.说明 使用Directory类对指定文件夹下的今天或者更早日期之前的文件进行删除.原文链接:http://www.cnblogs.com/lengzhan/p/6423943.html 2.代码 ...

  7. windows下 删除指定文件夹里面一周前的所有文件和文件夹的bat

    forfiles /p "指定文件夹路径" /m * /s /d -7 /c "cmd /c if @isdir==TRUE (rd /q @path) else del ...

  8. 创建批处理文件.bat文件(删除指定文件夹下的文件及文件夹并循环)

    1.针对仅仅是删除文件夹下的文件的操作:使用del命令,单纯的删除文件操作,如下:del /f /s /q C:\Users\dell\AppData\Local\Temp\*.* 2.删除文件夹操作 ...

  9. Java中删除指定文件夹文件夹下面有内容也删除使用递归方案

    import java.io.File; import java.text.ParseException; import java.text.SimpleDateFormat; import java ...

随机推荐

  1. ASP.NET MVC5(二):控制器、视图与模型

    前言 本篇博文主要介绍ASP.NET MVC中的三个核心元素:控制器.视图与模型,以下思维导图描述了本文的主要内容. 控制器 控制器简介 在介绍控制器之前,简单的介绍一下MVC工作原理:URL告知路由 ...

  2. htm语言的语法基础及规则

    HTML的主要语法是元素和标签.元素是符合DTD(文档类型定义)的文档组成部分,如title(文档标题).IMG(图象).table(表格)等等.元素名不区分大小写的.HTML用标签来规定元素的属性和 ...

  3. Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)

    例子: 定义泛型Store package javabased; public interface Store<T> { } 两个实现类StringStore,IntegerStore p ...

  4. MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?

    本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的 ...

  5. Java模拟http请求调用远程接口工具类

    package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

  6. centOS6.4安装python3.5,并且安装pip

    前言: 如果你也是用的centos系统,打算装python3.0以上版本,再装python下载工具pip,那么恭喜你,你可能也会像我一样遇到各种各样的问题! 另外非常重要的一点:centos都会自带p ...

  7. Angular中使用Swiper不能滑动的解决方法

    Swiper是目前较为流行的移动端触摸滑动插件,因为其简单好用易上手,很受很多设计师的欢迎. 今天在使用Swiper的时候遇到这个问题: 使用angularjs动态循环生成swiper-slide类, ...

  8. Lamp单独安装(windows下)

    安装的软件清单:apache_2.2.9-win32-x86-openssl-0.9.8h-r2.msimysql-5.1.28-rc-win32.zipphp-5.2.6-Win32.zipphpM ...

  9. [leetcode-434-Number of Segments in a String]

    Count the number of segments in a string, where a segment is defined to be a contiguous sequence of ...

  10. 【Android Developers Training】 107. 认知用户当前的行为

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...