【问题标题】:How to delete all contents of a directory without deleting the directory如何在不删除目录的情况下删除目录的所有内容
【发布时间】:2018-03-17 04:00:49
【问题描述】:

我的服务器上有一个需要使用 PHP 清除的目录。我需要删除此目录中的所有文件和文件夹,但是,我不想删除主目录本身。我读过的所有内容,我找到的示例,它们似乎都删除了给定目录中的所有内容,但之后它也删除了给定目录。我尝试过的一个功能如下,但它也删除了主目录,我不能拥有它。

<?php
function rrmdir($dir) {
  if (is_dir($dir)) {
    $objects = scandir($dir);
    foreach ($objects as $object) {
      if ($object != "." && $object != "..") {
        if (filetype($dir."/".$object) == "dir") 
           rrmdir($dir."/".$object); 
        else unlink   ($dir."/".$object);
      }
    }
    reset($objects);
    rmdir($dir);
  }
}
?>

【问题讨论】:

    标签: php


    【解决方案1】:

    在函数的最后部分去掉这个rmdir($dir);

    function rrmdir($dir) {
        if (is_dir($dir)) {
          $objects = scandir($dir);
          foreach ($objects as $object) {
            if ($object != "." && $object != "..") {
              if (filetype($dir."/".$object) == "dir") 
                 rrmdir($dir."/".$object); 
              else unlink   ($dir."/".$object);
            }
          }
          reset($objects);
        // rmdir($dir); => this line deletes the directory you specified after its content has been deleted
        }
    }
    

    【讨论】:

      【解决方案2】:

      从您现有的代码中删除这一行rmdir($dir);,通过这一行,您还删除了您传递给函数参数的父目录。我还添加了我通常用于从目录中删除内容的代码 sn-p。

      function remove_directory($str) {
       //It it's a file.
       if (is_file($str)) {
           //Attempt to delete it.
           return unlink($str);
       }
       //If it's a directory.
       elseif (is_dir($str)) {
          //Get a list of the files in this directory.
          $scan = glob(rtrim($str,'/').'/*');
          //Loop through the list of files.
          foreach($scan as $index=>$path) {
              //Call our recursive function.
              remove_directory($path);
          }
          //Remove the directory itself.
          return @rmdir($str);
        }
       }
      
      //call our function
       $dir='directory_name';
       remove_directory($dir);
      

      【讨论】:

        【解决方案3】:

        我之前发布的代码版本也删除了子目录,因此删除代码中的最后一个 rmdir 会阻止它这样做。但是,我能够对有效的代码进行更改。此代码将删除给定目录中的所有内容,包括文件和文件夹,而不删除给定目录。

        function rrmdir($dir, $issub = false) {
            if (is_dir($dir)) {
                $objects = scandir($dir);
                foreach ($objects as $object) {
                    if ($object != "." && $object != "..") {
                        if (filetype($dir."/".$object) == "dir")
                             rrmdir($dir."/".$object, true);
                        else unlink   ($dir."/".$object);
                    }
                }
                reset($objects);
                if($issub) {
                  rmdir($dir);
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多