我正在尝试使用下面的功能从给定文件夹中删除所有文件和文件夹
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');
有什么想法吗?
答案 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
函数。调用它时,它将删除目录中的所有文件,然后返回该函数并删除目录本身。
注意:没有测试