删除空文件夹,递归PHP函数返回不为空

时间:2019-08-21 02:24:58

标签: php

我正在尝试使用下面的功能从给定文件夹中删除所有文件和文件夹

function deleteFolder($dir){
    if(file_exists($dir)){
        $it = new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS);
        $files = new \RecursiveIteratorIterator($it,\RecursiveIteratorIterator::CHILD_FIRST);

        foreach($files as $file) {
            chmod($file->getRealPath(),0755);
            if ($file->isDir()){
                rmdir($file->getRealPath());
            } else {
                unlink($file->getRealPath());
            }
        }
        rmdir($dir);
    }

}

但是使用文件夹名utso-pulgada-pd-loader-90ee46f149c9之一时,即使手动删除其中的所有文件,它也返回not empty仍然返回不为空

文件夹:utso-pulgada-pd-loader-90ee46f149c9

utso-pulgada-pd-loader-90ee46f149c9
    BUilder.php
    Patcher.php
    Loader.php

手动删除

unlink('utso-pulgada-pd-loader-90ee46f149c9/Builder.php');
unlink('utso-pulgada-pd-loader-90ee46f149c9/Patcher.php');
unlink('utso-pulgada-pd-loader-90ee46f149c9/Loader.php');
rmdir('utso-pulgada-pd-loader-90ee46f149c9');

有什么想法吗?

1 个答案:

答案 0 :(得分:-1)

使用递归函数可能更好。在您的情况下,就像这样:

function deleteFolder($dir){
    if(file_exists($dir)){
        $it = new \RecursiveDirectoryIterator($dir, \RecursiveDirectoryIterator::SKIP_DOTS);
        $files = new \RecursiveIteratorIterator($it,\RecursiveIteratorIterator::CHILD_FIRST);

        foreach($files as $file) {
            chmod($file->getRealPath(),0755);
            if ($file->isDir()){
                deleteFolder($file->getRealPath());  
                rmdir($file->getRealPath());
            } else {
                unlink($file->getRealPath());
            }
        }
        rmdir($dir);
    }
}

我们检查了当前文件是否为目录,然后使用目录路径调用deleteFolder函数。调用它时,它将删除目录中的所有文件,然后返回该函数并删除目录本身。

注意:没有测试