php 删除指定文件夹的实例讲解

1、前言

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

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

2、相关函数介绍

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

rmdir

详情参考: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);//删除空目录 }

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

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

// //关掉资源,删除目录 // 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 删除指定文件夹的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

时间: 2024-10-27 05:41:38

php 删除指定文件夹的实例讲解的相关文章

php递归删除指定文件夹的方法小结

  php递归删除指定文件夹的方法:       下面为你介绍了php递归删除指定文件夹的方法,实例总结了两种常用的递归删除文件夹的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例总结了两种php递归删除指定文件夹的方法.分享给大家供大家参考.具体如下: 方法一: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 function recursiveDelete($dir) { if ($handle = @o

PHP删除指定文件夹根目录指定日期之前文件

删除文件  代码如下 复制代码 file_delete = "home/meeta/my.php"; if (unlink($file_delete)) { echo "The file was deleted successfully.", "n"; } else { echo "The specified file could not be deleted. Please try again.", "n"

bat如何延时删除指定文件夹中的文件_DOS/BAT

本文介绍的是bat如何延时删除指定文件夹中的文件,下面话不多说了,有需要的来一起看看下面的详细内容. 一.bat延时 xp程序中通过ping 127.0.0.1 -n 20 来实现延时操作,ping本地地址20行. win7中通过timeout 20 来实现延时20秒. 二.删除指定文件 del /q d:\11\*.* 删除d:\11文件夹下的所有文件,并且不需要提示删除.     /P 删除每一个文件之前提示确认.     /F 强制删除只读文件.     /S 从所有子目录删除指定文件.

PHP删除指定文件夹所有文件代码

删除指定文件夹所有文件  代码如下 复制代码 $cacheDir = '../cache/runtime'; $dh = opendir($cacheDir); while ( $file = readdir($dh) ) { if (($file == '.') || ($file == '..')) { continue; } if (file_exists( $cacheDir . '/' .$file)) { if (!unlink($cacheDir . '/' . $file)) {

java删除指定文件夹或者文件

想要拷贝一份项目代码到家里,但是由于是从公司svn服务器上checkout下来的,其中有很多.svn文件.所以就写了个小工具删除.svn文件夹.就可以缩小整个工程大小. package delete.file; import java.io.File; public class DeleteFile {  //要删除的文件夹  static String delFileStr = ".svn";    public static void main(String args[]){   

.NET中删除指定文件夹中指定后缀名的所有文件!

问题描述 文件是随机生成的,所以文件名不确定,但具有确定的后缀名,请教如何删除之?? 解决方案 解决方案二:遍历文件夹删除文件就可以了,查查File,Directory类.解决方案三:stringPath;//路径if(System.IO.Directory.Exists(Path)){//SearchthedirectoryDirectoryInfodi=newDirectoryInfo(Path);FileInfo[]f=di.GetFiles("*.xls");//文件夹下的.x

php批量删除指定文件夹中指定后缀名文件

直接上代码: 下面的例子我们是以删除指定目录的html为例子哦,如果你要其它文件我们只要把html改成你自己要删除的后缀名就可以了.  代码如下 复制代码 <?php $lanmu = array("action","tiyu","yizhi","sheji","gaoxiao","maoxian","qipai","celue","

bat自动删除指定文件夹下前几天的文件的代码_DOS/BAT

复制代码 代码如下: @echo off set d=%date:~0,10% mshta vbscript:createobject("scripting.filesystemobject").opentextfile("wind.txt",2,true).writeline(dateadd("d",-2,"%d%"))(window.close) for /f %%m in (wind.txt) do (set tt=%%

python实现批量获取指定文件夹下的所有文件的厂商信息_python

本文实例讲述了python实现批量获取指定文件夹下的所有文件的厂商信息的方法.分享给大家供大家参考.具体如下: 功能代码如下: import os, string, shutil,re import pefile import codecs, sys import wx import struct #输出中打印Unicode字符 #sys.stdout = codecs.lookup('utf-8')[-1](sys.stdout) def addToDict(theDict,PEfile_Pa