可能重复:
How do I recursively delete a directory and its entire contents (files+sub dirs) in PHP?在PHP中,我如何递归删除所有非空的文件夹?
我需要递归删除目录,以及不为空的子目录。我找不到任何有用的类或函数来解决这个问题。
提前感谢您的回答。
可能重复:
How do I recursively delete a directory and its entire contents (files+sub dirs) in PHP?在PHP中,我如何递归删除所有非空的文件夹?
我需要递归删除目录,以及不为空的子目录。我找不到任何有用的类或函数来解决这个问题。
提前感谢您的回答。
从官方文档中的第一条评论。
<?php
// When the directory is not empty:
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
}
?>
编辑rmdir来rrmdir以纠正意图明显错字创建递归函数。
该死的,愚蠢的,因为某些原因想要人为验证,当我试图发布我的答案! +1虽然:-)。 – 2012-03-18 17:36:36
存在导致深层目录不起作用的错字。 if(filetype($ dir。“/”。$ object)==“dir”)rmdir($ dir。“/”。$ object);应该是rrmdir,以便再次调用该函数...否则,太棒了! – amurrell 2014-06-17 20:15:58
要递归删除目录,使用这样的:
function rrmdir($path) {
return is_file($path)? @unlink($path): array_map(__NAMESPACE__ . '\rrmdir',glob($path.'/*'))[email protected]($path);
}
仅在UNIX测试。
像这样的东西应该做...
function removeDir($path) {
// Normalise $path.
$path = rtrim($path, '/') . '/';
// Remove all child files and directories.
$items = glob($path . '*');
foreach($items as $item) {
is_dir($item) ? removeDir($item) : unlink($item);
}
// Remove directory.
rmdir($path);
}
removeDir('/path/to/dir');
这将删除所有子文件和文件夹,然后删除传递给它的顶层文件夹。
它可以做一些错误检查,如测试提供的路径是一个目录,并确保每次删除成功。
如果有文件的子文件夹,这个功能不工作..删除你的帖子,请不要浪费用户时间.. – 2014-11-26 09:12:34
@tazotodua而不是写一个构造不好的句子说明*不起作用*,为什么不'你解释为什么它不起作用,所以我可以修复它? – alex 2014-11-26 23:27:34
使用搜索功能(就像我刚才那样)会得到你的答案:http://stackoverflow.com/questions/3338123/how-do-i-recursively-delete-a-directory-and-its -entire-contents-filessub-dirs – 2012-03-18 17:34:13
http://lixlpixel.org/recursive_function/php/recursive_directory_delete/ – rjz 2012-03-18 17:34:21