PHP递归删除文件与目录函数

递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若满足条件,则调用函数本身,若不满足则终止本函数的自调用,然后把目前流程的主控权交回给上一层函数来执行。

我们来看一个经典的递归删除函数

函数的作用:删除目录下面的所有文件,并删除目录

函数代码:

 代码如下 复制代码

<?php 
function deldir($dirname){ 
    if(file_exists($dirname)){//首先判断目录是否有效 
        $dir = opendir($dirname);//用opendir打开目录 
        while($filename = readdir($dir)){//使用readdir循环读取目录里的内容 
         if($filename != "." && $filename != ".."){//排除"."和".."这两个特殊的目录 
            $file = $dirname."/".$filename; 
            if(is_dir($file)){//判断是否是目录,如果是则调用自身 
                deldir($file); //使用递归删除子目录   
            }else{ 
              @unlink($file);//删除文件 
            } 
          } 
        } 
            closedir($dir);//关闭文件操作句柄 
            rmdir($dirname);//删除目录 
    } 

?>

使用实例:Public是一个文件夹,里面有许多文件夹和文件,调用deldir($dirname)把它删除

<?php 
$dir='Public';//传入一个文件夹路径 
deldir($dir);//调用函数 
?>

说明:首先判断Public是否存在,如果在则打开Public,然后使用readdir循环读取Public目录里的内容,如果存在"."和".."这两个特殊目录则排除掉。如果遇到文件夹则调用自身处理,直到条件不满足。遇到文件则直接删除掉。最后层层跳出删除Public。

实例二,删除非空目录

 代码如下 复制代码

/*
 自定义的删除函数,可以删除文件和递归删除文件夹
*/
 function my_del($path)
{
 if(is_dir($path))
 {
   $file_list= scandir($path);
   foreach ($file_list as $file)
   {
    if( $file!='.' && $file!='..')
    {
     my_del($path.'/'.$file);
    }
   }
   @rmdir($path);  //这种方法不用判断文件夹是否为空, 因为不管开始时文件夹是否为空,到达这里的时候,都是空的  
 }
 else
 {
  @unlink($path);    //这两个地方最好还是要用@屏蔽一下warning错误,看着闹心
 }

}

$path='d:/技术文档 - 副本';    //要删除的文件夹

//如果php文件不是ANSI,而是UTF-8模式,而且要删除的文件夹中包含汉字字符的话,调用函数前需要转码
//$path=iconv( 'utf-8', 'gb2312',$path );

my_del($path); 

例3,可查看成功之失败原因

 代码如下 复制代码
<?php   
functiondeletedir($dir){   
if(!handle=@opendir($dir)){//检测要打开目录是否存在   
die("没有该目录");   
}   
while(false!==($file=readdir($handle))){   
if($file!=="."&&$file!==".."){//排除当前目录与父级目录   
$file=$dir.DIRECTORY_SEPARATOR.$file;   
if(is_dir($file)){   
deletedir($file);   
}else{   
if(@unlink($file)){   
echo"文件<b>$file</b>删除成功。<br>";   
}else{   
echo"文件<b>$file</b>删除失败!<br>";   
}   
}   
}   
if(@rmdir($dir)){   
echo"目录<b>$dir</b>删除成功了。<br>n";   
}else{   
echo"目录<b>$dir</b>删除失败!<br>n";   
}   
}   
 
//测试程序   
$dir="/var/www/test";   
deletedir($dir);   
?>  

 
在/var/www/test文件夹下建一写文件夹和文件测试   
shell>touchaaa   
shell>touchbbb   
shell>touchccc   
shell>toucheee   
shell>touchffff   
shell>mkdir111   
shell>mkdir222   
shell>mkdir333   
分别再在111,222,333文件夹下建写文件这里就不多说了,然后给他们权限   
shell>chown[url]www.www[/url]test-R

时间: 2025-01-08 16:48:28

PHP递归删除文件与目录函数的相关文章

php自定义函数之递归删除文件及目录_php技巧

复制代码 代码如下: /*------------------ */ //– 递归删除文件及目录 //– 例: del_dir ('../cache/');注意:返回的/是必须的 //– $type 强制删除目录, true 是 ,false 否 /*------------------ */ function del_dir ($dir,$type=true) { $n=0; if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($fil

asp.net 删除文件夹,指定文件夹,删除文件夹和所有文件,删除权限设置,递归删除文件夹目录及文件

/// <summary>      /// 用递归方法删除文件夹目录及文件      /// </summary>      /// <param name="dir">带文件夹名的路径</param>       public void DeleteFolder(string dir)      {          if (Directory.Exists(dir)) //如果存在这个文件夹删除之           {      

asp.net C#文件操作(追加、拷贝、删除、移动文件、创建目录、递归删除文件夹及文件)

asp教程.net c#文件操作(追加.拷贝.删除.移动文件.创建目录.递归删除文件夹及文件) c#追加.拷贝.删除.移动文件.创建目录.递归删除文件夹及文件.指定文件夹下 面的所有内容copy到目标文件夹下面.指定文件夹下面的所有内容detele.读取文本文件.获取文件列表.读取日志文件.写入日志文件.创建html 文件.createdirectory方法的使用 c#追加文件 streamwriter sw = file.appendtext(server.mappath(".")+

linux 删除文件和目录与恢复详解

前面你已经学习了使用 touch 命令来创建文件,以及使用 mkdir 命令来创建目录 tigger. 现在,你需要学习如何删除文件和目录. 使用 rm 命令来删除文件和目录是一个直截了当的过程.详情请参阅 rm 的说明书页.删除文件和目录的选项包括: » -i - 互动.提示你确认删除.这个选项可以帮助你避免误删文件. » -f - 强制.代替互动模式,不提示地删除文件.除非你知道自己在干什么,使用这个选项通常不是明智之举. » -v - 详细.显示文件的删除进度. » -r - 递归.将会删

3 个在 Linux 中永久并安全删除文件和目录的方法

在大多数情况下,我们习惯于使用 Delete 键.垃圾箱或 rm 命令从我们的计算机中删除文件,但这不是永久安全地从硬盘中(或任何存储介质)删除文件的方法. 该文件只是对用户隐藏,它驻留在硬盘上的某个地方.它有可能被数据窃贼.执法取证或其它方式来恢复. 假设文件包含密级或机密内容,例如安全系统的用户名和密码,具有必要知识和技能的攻击者可以轻松地恢复删除文件的副本并访问这些用户凭证(你可以猜测到这种情况的后果). 在本文中,我们将解释一些命令行工具,用于永久并安全地删除 Linux 中的文件. 1

php 删除文件与目录代码

php 删除文件与目录代码 function del($name) {   if (!is_dir($name)) {    return @unlink($name);   } else {    $dir = opendir($name);    while( $file = readdir( $dir ) ) {     if (($file=='.')||($file=='..')) continue;     if (is_dir($name.'/'.$file)) $this->de

svn delete-删除文件和目录的实例

delete (del, remove, rm): 从版本库中删除文件和目录. 用法: 1.delete PATH... 2.delete URL... 1.每个 PATH 指定的项目会被调度到下次提交时从版本库删除.除非给出 --keep-local 参数,工作副本中没有提交的文件和目录会被立即删除. 如果 PATH 是未版本控制或者已修改的项目,或者包含这些项目,那么仅当 给出 --force 参数时这些项目才会被删除. 2.每个 URL 指定的项目会通过立即提交从版本库中删除. 有效选项:

【File】递归删除文件夹中子级文件/夹,并删除文件夹

今天有这样一个需求,需要删除某一个文件夹,但是文件夹中还有子级的文件 或者还可能会有文件夹在里面,所以就需要使用一个简单的递归才能将文件夹删除成功,包括文件夹中的子级文件/夹.!!! 其实很简单,就一个方法就可以搞定了, 1 /** 2 * 递归删除文件夹中文件,最后删除文件夹 3 */ 4 public void deleteFiles(String path){ 5 File file = new File(path); 6 if(file.exists()){ 7 if(file.isDi

linux rm 命令(删除文件和目录) 使用详解

  rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是删除了链接,原有文件均保持不变. rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf).所以,我们在执行rm之前最好先确认一下在哪个目录,到底要删除什么东西,操作时保持高度清醒的头脑. 1.命令格式: rm [选项] 文件- 2.命令功能: 删除一个目录中的一个或多个文件或目录,