我需要递归删除不为空的目录和子目录。我找不到任何有用的类或函数来解决这个问题。
提前感谢您的回答。
来自官方文档中的第一条评论。
<?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 以纠正拼写错误,以创建递归函数的明显意图。
像这样的事情应该这样做......
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');
这将删除所有子文件和文件夹,然后删除传递给它的顶级文件夹。
它可以进行一些错误检查,例如测试提供的路径是一个目录并确保每次删除都成功。
要递归删除目录,请使用:
function rrmdir($path) {
return is_file($path)? @unlink($path): array_map(__NAMESPACE__ . '\rrmdir',glob($path.'/*'))==@rmdir($path);
}
仅在 unix 上测试。