如何删除目录的所有内容而不删除目录

时间:2018-03-17 04:00:49

标签: php

我的服务器上有一个目录,我需要使用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);
  }
}
?>

3 个答案:

答案 0 :(得分:0)

在函数的最后部分删除此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
    }
}

答案 1 :(得分:0)

从现有代码 rmdir($ dir); 中删除此行,使用此行还删除您在函数参数上传递的父目录。我还添加了通常用于从目录中删除内容的代码片段。

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);

答案 2 :(得分:0)

我之前发布的代码版本也删除了子目录,因此删除代码中的最后一个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);
        }
    }
}