为了账号安全,请及时绑定邮箱和手机立即绑定

删除文件夹和所有内部内容函数返回“目录非空”

删除文件夹和所有内部内容函数返回“目录非空”

PHP
ibeautiful 2021-10-15 16:31:20
下面是我尝试删除文件夹及其所有内容的尝试。文件夹可能包含 zip 文件和带有文件的文件夹。public 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) {            if ($file->isDir()){                rmdir($file->getRealPath());            } else {                unlink($file->getRealPath());            }        }        rmdir($dir);    }           }但它返回以下错误:rmdir(C:\Juliver\UIUX\pd-loader\loader/temp/utso-pulgada-pd-loader-5066a7e0298a):第 95 行 C:\Juliver\UIUX\pd-loader\loader\Patcher.php 中的目录不为空line 95指向rmdir($dir);线如果我检查文件夹utso-pulgada-pd-loader-5066a7e0298a,我会看到它已经是空的,但它会抛出上述错误。
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

$dirname = 'C:/Users/Admin/Desktop/test';

array_map('unlink', glob("$dirname/*.*"));

rmdir($dirname);

试试这个,这会删除文件夹中存在的所有文件,还有那个文件夹


查看完整回答
反对 回复 2021-10-15
?
临摹微笑

TA贡献1982条经验 获得超2个赞

目录可能包含其他目录,因此您必须使用递归函数。


function removeDir($path) {

    $files = glob("$path/*");

    foreach ($files as $file) {

        if (is_dir($file)) {

            removeDir($file);

        } else {

            unlink($file);

        }

    }


    rmdir($path);

}

现在足以调用 removeDir("/my/nice/path"); 如果您看到该目录已经为空,请尝试检查隐藏文件并确保您具有正确的权限。


查看完整回答
反对 回复 2021-10-15
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我怀疑您已经检查过它不是文件权限问题。由于您的代码适用于我而不适用于您,这让我想知道它是否与 PHP 文件统计或真实路径缓存有关。

取消链接文件应自动清除单个文件的统计缓存。但是,以前已知PHP 错误会导致 rmdir 出现此问题。

尝试在 foreach 块中的 rmdir 语句之后执行clearstatcache。

以前我使用过 glob (在其他答案中提到过)所以我不知道 RecursiveDirectoryIterator 如何重新处理文件句柄;作为一个长期尝试,尝试unset($files); unset($it)在您的最终 rmdir 之前销毁这些对象 ( )。


查看完整回答
反对 回复 2021-10-15
  • 3 回答
  • 0 关注
  • 121 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信