在PHP中迭代删除

时间:2012-10-07 10:50:07

标签: php recursion iteration directory delete-file

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

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

我通过发送必须以递归方式删除的父目录名来触发此函数(包含所有内容)

问题是,我正在

  

[07-Oct-2012 04:31:51] PHP警告:rmdir(./ somefolder)[function.rmdir]:第69行的目录不为空`RecursiveIteratorIterator :: CHILD_FIRST`

我错过了什么?

3 个答案:

答案 0 :(得分:1)

试试这个

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

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

答案 1 :(得分:0)

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

答案 2 :(得分: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');