以下是我尝试删除的文件夹及其所有内容。文件夹可能包含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 ,我会发现它已经空了,但会引发上述错误。有什么想法吗?
答案 0 :(得分:0)
$dirname = 'C:/Users/Admin/Desktop/test';
array_map('unlink', glob("$dirname/*.*"));
rmdir($dirname);
尝试此操作,这将删除该文件夹中存在的所有文件,并且也删除该文件夹
答案 1 :(得分:0)
目录可能包含其他目录,因此您必须使用递归函数。
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”); 如果您发现目录已经为空,请尝试检查隐藏文件并确保您具有正确的权限。
答案 2 :(得分:0)
我怀疑您已经检查了它不是文件权限问题。由于您的代码对我有用,但对我不起作用,这使我想知道这与PHP文件状态或Real Path缓存有关。
取消链接文件应自动清除单个文件的状态缓存。但是,PHP错误中有previously been known to cause this issue with rmdir。
尝试在您的foreach块中的rmdir语句之后执行clearstatcache。
以前我用过glob(在其他答案中已经提到过),所以我不知道RecursiveDirectoryIterator如何在重新处理文件句柄时起作用。作为长镜头,尝试在最终rmdir之前销毁这些对象(unset($files);
unset($it)
)。