我想知道,删除一个包含所有文件的目录最简单的方法是什么?
我使用的是rmdir(PATH。“/”。美元价值);要删除一个文件夹,但是,如果里面有文件,我根本不能删除它。
我想知道,删除一个包含所有文件的目录最简单的方法是什么?
我使用的是rmdir(PATH。“/”。美元价值);要删除一个文件夹,但是,如果里面有文件,我根本不能删除它。
当前回答
类似Playnox的解决方案,但有优雅的内置DirectoryIterator:
function delete_directory($dirPath){
if(is_dir($dirPath)){
$objects=new DirectoryIterator($dirPath);
foreach ($objects as $object){
if(!$object->isDot()){
if($object->isDir()){
delete_directory($object->getPathname());
}else{
unlink($object->getPathname());
}
}
}
rmdir($dirPath);
}else{
throw new Exception(__FUNCTION__.'(dirPath): dirPath is not a directory!');
}
}
其他回答
我更喜欢这个,因为它仍然在成功时返回TRUE,失败时返回FALSE,而且它还防止了一个错误,即一个空路径可能会尝试删除'/*'中的所有内容!!:
function deleteDir($path)
{
return !empty($path) && is_file($path) ?
@unlink($path) :
(array_reduce(glob($path.'/*'), function ($r, $i) { return $r && deleteDir($i); }, TRUE)) && @rmdir($path);
}
使用DirectoryIterator等价于之前的答案…
function deleteFolder($rootPath)
{
foreach(new DirectoryIterator($rootPath) as $fileToDelete)
{
if($fileToDelete->isDot()) continue;
if ($fileToDelete->isFile())
unlink($fileToDelete->getPathName());
if ($fileToDelete->isDir())
deleteFolder($fileToDelete->getPathName());
}
rmdir($rootPath);
}
删除文件夹中的所有文件 到“分离”,水珠(" $目录/ * . * ")); 删除文件夹中所有。*-文件(不带"."和"..") 到“分离”,array_diff(水珠(“目录/美元。*),数组(“目录/美元。”,“目录/美元. .”))) 现在删除文件夹本身 删除文件夹(目录)
我不敢相信有30多个答案。在PHP中递归删除一个文件夹可能需要几分钟,这取决于目录的深度和其中的文件数量!你可以用一行代码做到这一点…
Shell_exec ("rm -rf "。美元dir);
如果您关心删除整个文件系统,请首先确保您的$dir路径正是您想要的。永远不要允许用户输入一些可以直接删除文件的东西,而不首先严格验证输入。这是基本的编码实践。
我通常用它来删除文件夹中的所有文件:
array_map('unlink', glob("$dirname/*.*"));
然后你就可以做了
rmdir($dirname);