-1

这是我的递归文件和文件夹删除器功能。

function rmdirRecursively($dir) {
    global $exc;
    $it = new RecursiveIteratorIterator(
                    new RecursiveDirectoryIterator($dir),
                    RecursiveIteratorIterator::CHILD_FIRST
    );

    $excludeDirsNames = array();
    $excludeFileNames = $exc["files"];

    foreach ($it as $entry) {
        if ($entry->isDir()) {
            if (!in_array($entry->getBasename(), $excludeDirsNames)) {
                try {
                    rmdir($entry->getPathname());
                } catch (Exception $ex) {
                    // dir not empty
                }
            }
        } elseif (!in_array($entry->getFileName(), $excludeFileNames)) {
            unlink($entry->getPathname());
        }
    }
}

我通过发送必须递归删除的父目录名称来触发此功能(及其所有内容)

问题是,我得到

[2012 年 10 月 7 日 04:31:51] PHP 警告:rmdir(./somefolder) [function.rmdir]:第 69 行的目录不为空`RecursiveIteratorIterator::CHILD_FIRST`

我错过了什么?

4

3 回答 3

1

尝试这个

$excludeDirsNames = array('.', '..');

否则,您将尝试在删除其所有内容之前删除当前目录和父目录。

于 2012-10-07T11:13:20.297 回答
0

首先列出DIR的文件并删除它们,然后您就可以删除DIR

于 2012-10-07T12:08:21.793 回答
0

试试这个代码:

function DelDir($dir)
{
  $d = dir($dir);
  while (false !== ($entry = $d->read()))
  {
    if (($entry != '.') && ($entry != '..'))
    {
      if (is_file($dir . '/' . $entry))
        unlink($dir . '/' . $entry);
      else
        DelDir($dir . '/' . $entry);
    }
  }
  $d->close();
  rmdir($dir);
}


DelDir('./test');
于 2012-10-07T12:24:23.597 回答