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

再帰的に削除する必要がある親ディレクトリ名を送信することにより、この関数を起動しています(すべての内容とともに)

問題は、私が得ていることです

[07-Oct-2012 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 に答える