使用PHP删除目录及其子目录
介绍
删除目录的常用方法是unlink()函数,但是这个函数不能删除目录。有很多方法可以删除目录和目录中的所有文件,包括执行系统命令、手动遍历并删除目录和目录中的文件,和使用递归函数。本文将介绍如何使用递归函数删除目录和目录中的所有文件。
准备
在删除目录之前,需要检查权限、是否存在和是否是一个目录。这可以使用PHP内置的函数进行。
确定权限
以下代码展示如何检查文件是否可写:
if (is_writable($dir)) {
// 可写
} else {
// 不可写
}
目录是否存在
以下代码展示如何检查目录是否存在:
if (file_exists($dir)) {
// 存在
} else {
// 不存在
}
是否是目录
以下代码展示如何检查文件是否是一个目录:
if (is_dir($dir)) {
// 是目录
} else {
// 不是目录
}
删除目录及其中文件
删除文件夹及其内容需要使用递归函数。 recursion(递归) 是一种自相似的技术,经常出现在计算机和数学领域中。递归函数是调用自身的函数。在我们的例子中,函数deleteDirRecursive()会调用自身以删除所有目录和文件。
function deleteDirRecursive($dir) {
// 确定文件夹是否存在
if (!file_exists($dir)) {
return false;
}
// 判断文件夹是否可写
if (!is_writable($dir)) {
return false;
}
// 如果是一个目录则执行
if (is_dir($dir)) {
foreach (scandir($dir) as $file) {
// 忽略 . 和 ..
if ($file !== '.' && $file !== '..') {
// 如果当前是目录递归调用自身
if (is_dir($dir . '/' . $file)) {
deleteDirRecursive($dir . '/' . $file);
} else {
// 删除文件
unlink($dir . '/' . $file);
}
}
}
// 删除最外层目录
rmdir($dir);
return true;
}
}
运行
要运行这个函数,只需要指定您要删除的文件夹路径即可:
deleteDirRecursive('/path/to/dir');
此函数将一个目录及其中的所有子目录和文件删除。
总结
使用递归函数是一种十分方便的方法来删除目录和目录中的文件。但是,执行这个函数前应检查权限、目录是否存在以及文件是否是目录。