php RecursiveDirectoryIterator目录删除问题

安景

尝试使用目录迭代器删除空文件夹,但是总是会出现错误:删除目录后,访问被拒绝(代码:5)。

我在这里做错了什么?

$directory_iterator = new RecursiveDirectoryIterator($images_path, RecursiveDirectoryIterator::SKIP_DOTS);
    $objects = new RecursiveIteratorIterator($directory_iterator, RecursiveIteratorIterator::SELF_FIRST);
    try {

        echo "Removing empty folders...\n";

        foreach ($objects as $object) {

            if ($object->isDir()) {
                echo $object->getRealPath()."\n";
                $isDirEmpty = new FilesystemIterator($object->getRealPath());
                if (!$isDirEmpty->valid()){
                    echo $object->getFilename() . " - directory removed\n";
                    $path = $object->getRealPath();
                    rmdir($path);
                }
            }
        }
    } catch(Exception $e){
        echo $e->getMessage();
    }
紫菜

目录迭代器仍然“记住”该文件夹存在,因此尝试读取其内容。但是,当您删除它时,迭代器将失败。

要解决此问题,您可以将空文件夹路径放入数组中,然后在主循环完成后将其删除。

$empty_dirs = [];
$directory_iterator = new RecursiveDirectoryIterator($images_path, RecursiveDirectoryIterator::SKIP_DOTS);
$objects = new RecursiveIteratorIterator($directory_iterator, RecursiveIteratorIterator::SELF_FIRST);
try {

    echo "Removing empty folders...\n";

    foreach ($objects as $object) {

        if ($object->isDir()) {
            echo $object->getRealPath()."\n";
            $isDirEmpty = new FilesystemIterator($object->getRealPath());
            if (!$isDirEmpty->valid()){
                echo $object->getFilename() . " - directory removed\n";
                $path = $object->getRealPath();
                //rmdir($path);
                $empty_dirs[] = $path;
            }
        }
    }
} catch(Exception $e){
    echo $e->getMessage();
}

foreach ($empty_dirs as $path)
{
    rmdir($path);
}

没有数组的另一种方法:

$empty_dir = null;
$directory_iterator = new RecursiveDirectoryIterator($images_path, RecursiveDirectoryIterator::SKIP_DOTS);
$objects = new RecursiveIteratorIterator($directory_iterator, RecursiveIteratorIterator::SELF_FIRST);
try {

    echo "Removing empty folders...\n";

    foreach ($objects as $object) {

        if ($object->isDir()) {
            echo $object->getRealPath()."\n";
            $isDirEmpty = new FilesystemIterator($object->getRealPath());
            if (!$isDirEmpty->valid()){
                echo $object->getFilename() . " - directory removed\n";
                $path = $object->getRealPath();
                if ($empty_dir !== null)
                    rmdir($empty_dir);
                $empty_dir = $path;
            }
        }
    }
} catch(Exception $e){
    echo $e->getMessage();
}

if (!is_null($empty_dir))
    rmdir($empty_dir);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP中的RecursiveDirectoryIterator,在foreach中将每个目录两次

来自分类Dev

PHP RecursiveDirectoryIterator

来自分类Dev

PHP:删除目录的安全方法?

来自分类Dev

PHP删除错误的目录

来自分类Dev

删除php目录中的文件

来自分类Dev

PHP中删除$_SESSION的问题

来自分类Dev

从RecursiveDirectoryIterator过滤目录

来自分类Dev

RecursiveDirectoryIterator列出目录

来自分类Dev

PHP的压缩目录出现问题

来自分类Dev

PHP列出目录中的文件并删除扩展

来自分类Dev

PHP递归删除空的父目录

来自分类Dev

使用ssh删除目录中的php文件

来自分类Dev

PHP递归删除空的父目录

来自分类Dev

从网址中删除2目录和php

来自分类Dev

PHP从SQL和目录形式删除

来自分类Dev

PHP:spl_autoload_register + RecursiveDirectoryIterator

来自分类Dev

使用php在mysql中删除rown的问题

来自分类Dev

从Mediawiki URL删除index.php的问题

来自分类Dev

PHP的目录

来自分类Dev

删除目录和子目录的问题

来自分类Dev

从包含反斜杠的服务器中删除目录(PHP)

来自分类Dev

从子目录中的CI删除index.php

来自分类Dev

从php中的文件目录中删除文件扩展名

来自分类Dev

从包含反斜杠的服务器中删除目录(PHP)

来自分类Dev

从子目录网站URL删除index.php

来自分类Dev

从子目录中的CI删除index.php

来自分类Dev

使用 PHP 删除或取消链接目录中的文件夹

来自分类Dev

PHP 删除目录和任何子目录中的所有空文件

来自分类Dev

PHP图像删除unlink()在本地主机上的问题