如何在PHP中递归删除目录及其全部内容(文件+子目录)?
2022-08-30 06:43:33
如何在PHP中删除目录及其全部内容(文件和子目录)?
如何在PHP中删除目录及其全部内容(文件和子目录)?
rmdir
手册页中的用户贡献部分包含一个不错的实现:
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (is_dir($dir. DIRECTORY_SEPARATOR .$object) && !is_link($dir."/".$object))
rrmdir($dir. DIRECTORY_SEPARATOR .$object);
else
unlink($dir. DIRECTORY_SEPARATOR .$object);
}
}
rmdir($dir);
}
}
根据 Pixel Developer 的评论,使用 SPL 的代码段可能如下所示:
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::CHILD_FIRST
);
foreach ($files as $fileinfo) {
$todo = ($fileinfo->isDir() ? 'rmdir' : 'unlink');
$todo($fileinfo->getRealPath());
}
rmdir($dir);
注意:它不进行健全性检查,而是使用 PHP 5.3.0 中随文件系统编辑器引入的 SKIP_DOTS 标志。当然,$todo
可以是一个if
/else
。重要的一点是,CHILD_FIRST
用于先循环访问子项(文件),然后再循环访问其父项(文件夹)。