当前位置: 首页 > 知识库问答 >
问题:

php删除特定文件夹及其所有内容

东方建修
2023-03-14

我使用php删除文件夹包含删除的帖子的图像。我正在使用下面的代码,我在网上找到的,做得很好。

我想知道当文件夹中有其他文件夹时,如何仅删除文件夹中的特定文件夹。

当我使用下面的代码时,如何做到这一点?使用:/dev/images/norman/8-

Eg:
/dev/images/norman/8 -> I need to delete only this folder
/dev/images/norman/9
/dev/images/norman/10
/dev/images/norman/11
/dev/images/norman/12

<?php
$path = $_SERVER['DOCUMENT_ROOT'].'/dev/images/norman/8';

emptyDir($path);

function emptyDir($path) { 

    // INITIALIZE THE DEBUG STRING
    $debugStr  = '';
    $debugStr .= "Deleting Contents Of: $path<br /><br />";

    // PARSE THE FOLDER
    if ($handle = opendir($path)) {

        while (false !== ($file = readdir($handle))) {

            if ($file != "." && $file != "..") {

                // IF IT"S A FILE THEN DELETE IT
                if(is_file($path."/".$file)) {

                    if(unlink($path."/".$file)) {
                    $debugStr .= "Deleted File: ".$file."<br />";   
                    }

                } else {

                    // IT IS A DIRECTORY
                    // CRAWL THROUGH THE DIRECTORY AND DELETE IT'S CONTENTS

                    if($handle2 = opendir($path."/".$file)) {

                        while (false !== ($file2 = readdir($handle2))) {

                            if ($file2 != "." && $file2 != "..") {
                                if(unlink($path."/".$file."/".$file2)) {
                                $debugStr .= "Deleted File: $file/$file2<br />";    
                                }
                            }

                        }

                    }

                    if(rmdir($path."/".$file)) {
                    $debugStr .= "Directory: ".$file."<br />";  
                    }

                }

            }

        }

    }
    echo $debugStr;
}

?>

共有3个答案

司马渝
2023-03-14

我在您的函数中添加了一个$exclude参数,这个参数是一个数组,其中包含您要排除的目录名,如下所示:

$path = $_SERVER['DOCUMENT_ROOT'].'/dev/images/norman/';

emptyDir($path); //will delete all under /norman/
emptyDir($path, array('8')); //will delete all under /norman/ except dir 8
emptyDir($path, array('8','10')); //will delete all under /norman/ except dir 8 and 10

function emptyDir($path,$exclude=false) { 

    // INITIALIZE THE DEBUG STRING
    $debugStr  = '';
    $debugStr .= "Deleting Contents Of: $path<br /><br />";
    if (!$exclude) {
       $exclude = array();
    }

    // PARSE THE FOLDER
    if ($handle = opendir($path)) {

        while (false !== ($file = readdir($handle))) {

            if ($file != "." && $file != "..") {

                // IF IT"S A FILE THEN DELETE IT
                if(is_file($path."/".$file)) {

                    if(unlink($path."/".$file)) {
                    $debugStr .= "Deleted File: ".$file."<br />";   
                    }

                } else if (!in_array($file, $exclude)) {

                    // IT IS A DIRECTORY
                    // CRAWL THROUGH THE DIRECTORY AND DELETE IT'S CONTENTS

                    if($handle2 = opendir($path."/".$file)) {

                        while (false !== ($file2 = readdir($handle2))) {

                            if ($file2 != "." && $file2 != "..") {
                                if(unlink($path."/".$file."/".$file2)) {
                                $debugStr .= "Deleted File: $file/$file2<br />";    
                                }
                            }

                        }

                    }

                    if(rmdir($path."/".$file)) {
                    $debugStr .= "Directory: ".$file."<br />";  
                    }

                }

            }

        }

    }
    echo $debugStr;
}
孔瑾瑜
2023-03-14

您想了解rmdir

if(is_file($path."/".$file)) {

    if(unlink($path."/".$file)) {
    $debugStr .= "Deleted File: ".$file."<br />";   
    }

} else {

    if(rmdir($path."/".$file)) {
        $debugStr .= "Deleted Directory: ".$file."<br />";   
    }

}

编辑:由于rmdir只能处理空dir,您可以使用rmdir页面注释中报告的此解决方案:

function rrmdir($dir) {
    foreach(glob($dir . '/*') as $file) {
        if(is_dir($file))
            rrmdir($file);
        else
            unlink($file);
    }
    rmdir($dir);
}

它只是递归地删除$dir中的所有内容,然后去掉目录本身。

郤立果
2023-03-14
<?php

delete_directory($dirname) {
   if (is_dir($dirname))
      $dir_handle = opendir($dirname);
   if (!$dir_handle)
      return false;
   while($file = readdir($dir_handle)) {
      if ($file != "." && $file != "..") {
         if (!is_dir($dirname."/".$file))
            unlink($dirname."/".$file);
         else
            delete_directory($dirname.'/'.$file);    
      }
   }
   closedir($dir_handle);
   rmdir($dirname);
   return true;
 }
?>

如果您使用的是5.1及以上版本,

<?php
function deleteDir($dir) {
   $iterator = new RecursiveDirectoryIterator($dir);
   foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $file) 
   {
      if ($file->isDir()) {
         rmdir($file->getPathname());
      } else {
         unlink($file->getPathname());
      }
   }
   rmdir($dir);
}

deleteDir("temporary");
?>
 类似资料:
  • 问题内容: 例如,我有一个名为“ Temp”的文件夹,我想使用PHP删除或刷新此文件夹中的所有文件。我可以这样做吗? 问题答案: 如果要删除“隐藏”文件(如.htaccess),则必须使用

  • 本文向大家介绍java 删除文件夹中的所有内容而不删除文件夹本身的实例,包括了java 删除文件夹中的所有内容而不删除文件夹本身的实例的使用技巧和注意事项,需要的朋友参考一下 实例如下: 以上这篇java 删除文件夹中的所有内容而不删除文件夹本身的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍PHP实现批量清空删除指定文件夹所有内容的方法,包括了PHP实现批量清空删除指定文件夹所有内容的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现批量清空删除指定文件夹所有内容的方法。分享给大家供大家参考,具体如下: cleancache.php: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php文件操作总结》、《PHP基本语法入门教程》、《php面向对

  • 本文向大家介绍Java编程迭代地删除文件夹及其下的所有文件实例,包括了Java编程迭代地删除文件夹及其下的所有文件实例的使用技巧和注意事项,需要的朋友参考一下 本文研究的是Java编程迭代地删除文件实例,具体实现代码如下。 实例代码: 总结 以上就是本文关于Java编程迭代地删除文件夹及其下的所有文件实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留

  • 本文向大家介绍Java删除指定文件夹下的所有内容的方法(包括此文件夹),包括了Java删除指定文件夹下的所有内容的方法(包括此文件夹)的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇Java删除指定文件夹下的所有内容的方法(包括此文件夹) 就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 有关删除数据的Firebase文档中说: 删除数据 删除数据的最简单方法是对数据位置的引用调用remove()。 还可以通过将null指定为另一个写入操作(如set()或update())的值来删除。您可以将此技术与update()结合使用,在单个API调用中删除多个子项。 有谁能解释一下,我认为最后一行可以帮助我删除firebase文件夹中的所有文件是什么意思?