递归删除文件夹和所有包含的文件

时间:2017-06-20 19:29:13

标签: php

我正在尝试删除压缩/下载内容后生成的嵌套文件夹,但我遇到的问题是我最终得到一个无法删除的空文件夹。我在类似的问题中找到了这个答案,以及它的一些版本,但由于某种原因,尽管没有内容,但最后一个文件夹认为它不是空的。

function recursiveRemove($dir) {
  $structure = glob(rtrim($dir, "/").'/*');
  if (is_array($structure)) {
    foreach($structure as $file) {
        if (is_dir($file)) recursiveRemove($file);
        elseif (is_file($file)) unlink($file);
    }
  }
  rmdir($dir);
}

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

它试图过快地删除太多文件夹 - 让系统打开/关闭文件夹就足以验证内部没有任何内容并按预期删除所有内容。

function recursiveRemove($dir) {
  $structure = glob(rtrim($dir, "/").'/*');
  if (is_array($structure)) {
    foreach($structure as $file) {
        if (is_dir($file)) recursiveRemove($file);
        elseif (is_file($file)) unlink($file);
    }
  }
  //Opening and closing the directory forces system to recognize it is empty
  $openCheck = opendir($dir);
  closedir($openCheck);
  //Remove directory after done removing all children
  rmdir($dir);
}

谢谢Xatenev让我走上正轨!我觉得这可能有点笨拙 - 如果有人有更好的主意,请告诉我!

答案 1 :(得分:0)

试试这个:

/**
 * Remove directory recursively.
 *
 * @param string $path Path
 * @return bool True on success or false on failure.
 */
function rrmdir($path) {
    $files = glob($path . '/*');
    foreach ($files as $file) {
        is_dir($file) ? rrmdir($file) : unlink($file);
    }
    return rmdir($path);
}