php 删除指定文件夹
php 删除指定文件夹
目标: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 删除指定文件夹的更多相关文章
- PHP批量清空删除指定文件夹内容
PHP批量清空删除指定文件夹内容: cleancache.php <?php // 清文件缓存 $dirs = array( realpath(dirname(__FILE__) . '/../ ...
- FILE文件删除操作(删除指定文件夹下所有文件和文件夹包括子文件夹下所有文件和文件夹),就是删除所有
2018-11-05 19:42:08开始写 选择 删除 1.FileUtils.java类 import java.io.File;//导入包 import java.util.List;//导入 ...
- Java:<获取>、<删除>指定文件夹及里面所有文件
工具类代码如下: 一.获取 public Class Test{ //定义全局变量,存放所有文件夹下的文档 List<String> fileList ; public List<S ...
- git删除指定文件夹
1.在本地仓库删除指定文件 git rm 文件名名称 2.在本地仓库删除指定文件夹 git rm -r 文件夹/ 3.提交修改 git commit -m"删除文件夹" 4.推送到 ...
- bat 延时删除指定文件夹中的文件经验分享
1.bat延时 xp程序中通过ping 127.0.0.1 -n 20 来实现延时操作,ping本地地址20行. win7中通过timeout 20 来实现延时20秒. 2.删除指定文件 del /q ...
- c#删除指定文件夹中今天之前的文件
1.说明 使用Directory类对指定文件夹下的今天或者更早日期之前的文件进行删除.原文链接:http://www.cnblogs.com/lengzhan/p/6423943.html 2.代码 ...
- windows下 删除指定文件夹里面一周前的所有文件和文件夹的bat
forfiles /p "指定文件夹路径" /m * /s /d -7 /c "cmd /c if @isdir==TRUE (rd /q @path) else del ...
- 创建批处理文件.bat文件(删除指定文件夹下的文件及文件夹并循环)
1.针对仅仅是删除文件夹下的文件的操作:使用del命令,单纯的删除文件操作,如下:del /f /s /q C:\Users\dell\AppData\Local\Temp\*.* 2.删除文件夹操作 ...
- Java中删除指定文件夹文件夹下面有内容也删除使用递归方案
import java.io.File; import java.text.ParseException; import java.text.SimpleDateFormat; import java ...
随机推荐
- css3转盘抽奖
做到一个活动,需要转盘抽奖,于是想到使用css3的动画效果,其中主要包含transition的动画过渡,transform的rotate的旋转效果,在这里只用到2d的旋转, 特别强调的是,因为需要和后 ...
- java原生实现屏幕设备遍历和屏幕采集(捕获)等功能
前言:本章中屏幕捕获使用原生java实现,屏幕图像显示采用javacv1.3的CanvasFrame 一.实现的功能 1.屏幕设备遍历 2.本地屏幕图像采集(也叫屏幕图像捕获) 3.播放本地图像(采用 ...
- Vue 爬坑之路(四)—— 与 Vuex 的第一次接触
在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用 props 或者 $emit 等方式 http://www.cnblogs.com/wisewrong/p/62660 ...
- 在Caffe添加Python layer详细步骤
本文主要讨论的是在caffe中添加python layer的一般流程,自己设计的test_python_layer.py层只是起到演示作用,没有实际的功能. 1) Python layer 在caff ...
- mac sourcetree启用外部合并工具(beyond compare)
设置步骤及遇到的问题: 一.在sourcetree中设置diff为外部工具. 1.步骤:打开sourcetree偏好设置的diff菜单. 2.问题:发现sourcetree偏好中的"外部代码 ...
- RSA加密通信小结(四)--RSA加解密的实际操作与流程小结
在上一篇文章中,我们已经将密钥的生成方法和流程,归纳总结.而本篇主要是讲如何利用密钥进行加解密. 首先,在上一篇文章中的我们生成了很多密钥,证书等等. 在上述生成的文件中,接收服务端加密报文:pkcs ...
- Laravel踩坑笔记——illuminate/html被抛弃
起因 在使用如下代码的时候发生报错 {!! Form::open() !!} 错误信息 [Symfony\Component\Debug\Exception\FatalErrorException] ...
- 【原创】Kafka Consumer多线程实例续篇
在上一篇<Kafka Consumer多线程实例>中我们讨论了KafkaConsumer多线程的两种写法:多KafkaConsumer多线程以及单KafkaConsumer多线程.在第二种 ...
- Android recyclerView的空数据显示
直接分享链接:http://blog.csdn.net/whitley_gong/article/details/51244723
- [leetcode-530-Minimum Absolute Difference in BST]
Given a binary search tree with non-negative values, find the minimum absolute difference between va ...