猿问

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

下面是我尝试删除文件夹及其所有内容的尝试。文件夹可能包含 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,我会看到它已经是空的,但它会抛出上述错误。


ibeautiful
浏览 122回答 3
3回答

大话西游666

$dirname = 'C:/Users/Admin/Desktop/test';array_map('unlink', glob("$dirname/*.*"));rmdir($dirname);试试这个,这会删除文件夹中存在的所有文件,还有那个文件夹

临摹微笑

目录可能包含其他目录,因此您必须使用递归函数。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"); 如果您看到该目录已经为空,请尝试检查隐藏文件并确保您具有正确的权限。

尚方宝剑之说

我怀疑您已经检查过它不是文件权限问题。由于您的代码适用于我而不适用于您,这让我想知道它是否与 PHP 文件统计或真实路径缓存有关。取消链接文件应自动清除单个文件的统计缓存。但是,以前已知PHP 错误会导致 rmdir 出现此问题。尝试在 foreach 块中的 rmdir 语句之后执行clearstatcache。以前我使用过 glob (在其他答案中提到过)所以我不知道 RecursiveDirectoryIterator 如何重新处理文件句柄;作为一个长期尝试,尝试unset($files); unset($it)在您的最终 rmdir 之前销毁这些对象 ( )。
随时随地看视频慕课网APP
我要回答