6

我正在努力解决如何使用 SPL 迭代器删除 PHP 中的空目录树。考虑以下所有目录为空的目录结构:

/顶部目录

  level1

       level2

我尝试了以下方法:

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(
    '/topdir', RecursiveIteratorIterator::CHILD_FIRST
));

foreach ($it as $file) {
    if ($file->isDir()) {
        rmdir((string)$file);
    }
}

但是RecursiveIteratorIterator::CHILD_FIRST阻止底层文件成为循环的一部分,我得到标准的Directory not emptyE_WARNING 因为 level1 不是空的。

如何使用 SPL 迭代器递归删除空目录树?注意:我知道如何使用 , 等来执行此操作globscandir请不要将这些/类似功能作为解决方案提供。

我觉得我必须在这里遗漏一些非常基本的东西......

4

1 回答 1

10

它是对RecursiveIteratorIterator子目录的实际访问。唯一为它RecursiveDirectoryIterator提供了把手。

因此,您需要在RecursiveIteratorIterator而不是在CHILD_FIRST 上设置标志RecursiveDirectoryIterator

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('/topdir', FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST
);

foreach ($it as $file) {
    if ($file->isDir()) {
        rmdir((string)$file);
    }
}

为了防止出现警告,还要将::SKIP_DOTS标志添加到RecursiveDirectoryIterator

于 2012-05-15T22:58:04.227 回答