删除包含文件的目录?

新手上路,请多包涵

我想知道,删除包含所有文件的目录的最简单方法是什么?

我正在使用 rmdir(PATH . '/' . $value); 删除一个文件夹,但是,如果里面有文件,我根本无法删除它。

原文由 matt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 411
2 个回答

现在至少有两种选择。

  1. 在删除文件夹之前,请删除其所有文件和文件夹(这意味着递归!)。这是一个例子:
    public static function deleteDir($dirPath) {
       if (! is_dir($dirPath)) {
           throw new InvalidArgumentException("$dirPath must be a directory");
       }
       if (substr($dirPath, strlen($dirPath) - 1, 1) != '/') {
           $dirPath .= '/';
       }
       $files = glob($dirPath . '*', GLOB_MARK);
       foreach ($files as $file) {
           if (is_dir($file)) {
               self::deleteDir($file);
           } else {
               unlink($file);
           }
       }
       rmdir($dirPath);
   }

  1. 如果您使用的是 5.2+,则可以使用 RecursiveIterator 来执行此操作,而无需自己实现递归:
    $dir = 'samples' . DIRECTORY_SEPARATOR . 'sampledirtree';
   $it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
   $files = new RecursiveIteratorIterator($it,
                RecursiveIteratorIterator::CHILD_FIRST);
   foreach($files as $file) {
       if ($file->isDir()){
           rmdir($file->getRealPath());
       } else {
           unlink($file->getRealPath());
       }
   }
   rmdir($dir);

原文由 alcuadrado 发布,翻译遵循 CC BY-SA 4.0 许可协议

我不敢相信有 30 多个答案。递归删除 PHP 中的文件夹可能需要几分钟,具体取决于目录的深度和其中的文件数量!你可以用一行代码做到这一点……

shell_exec("rm -rf " . $dir);

如果您担心删除整个文件系统,请确保您的 $dir 路径正是您首先想要的。绝不允许用户输入可以直接删除文件的内容,而无需首先对输入进行大量验证。这是基本的编码实践。

原文由 WebTigers 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏