淘先锋技术网

首页 1 2 3 4 5 6 7

在PHP开发中,经常需要删除文件夹。PHP官方提供的rmdir()函数只能删除空目录,而delete_directory()是PHP删除非空目录的最佳方式。delete_directory()函数需要用到递归函数和unlink()函数。

function delete_directory($dir) {
if (!file_exists($dir)) {
return true;
}
if (!is_dir($dir)) {
return unlink($dir);
}
foreach (scandir($dir) as $item) {
if ($item == '.' || $item == '..') {
continue;
}
if (!delete_directory($dir . DIRECTORY_SEPARATOR . $item)) {
return false;
}
}
return rmdir($dir);
}

函数的第一段if语句是在判断目录是否存在,如果不存在则直接返回true,不执行后面的代码。而第二段if语句是在判断删除的是否为文件,如果是文件则返回unlink($dir),即删除操作。第一层foreach语句则用于循环处理文件夹内的文件,通过递归的方式删除文件夹内部的所有文件,再返回rmdir($dir)删除掉已成为空的目录。

为了避免删除掉系统文件,需要加上条件判断,只删除指定文件夹内的文件,而不是删除指定的盘符中的文件。

if (is_dir($delete_folder) && substr($delete_folder, -1) == '/') {
delete_directory($delete_folder);
}

我们使用is_dir()函数判断删除的文件夹是否为文件夹,同时使用substr()截取字符串最后一个字符检查是否为\/符号来避免层级的误判,保证不删除系统文件或者不允许删除的文件。

需要注意的是,虽然删除文件操作是比较危险和敏感的操作,但是在PHP开发过程中总会用到删除目录或者删除文件的操作,减少奇怪的删除或者误删除的情况,增加验证或者权限保护方案,可以更安全的使用PHP deldir操作。:

if (isset($_POST['submit'])) {
$delete_folder = $_POST['delete_folder'];
if (is_dir($delete_folder) && substr($delete_folder, -1) == '/') {
if ($delete_folder == '/photos/funny') {
echo 'This directory is not allowed to delete!';
} elseif (!delete_directory($delete_folder)) {
echo 'Directory Not Deleted, maybe some permission errors';
} else {
echo 'Directory Deleted Successfully';
}
} else {
echo 'Folder path not valid';
}
}

在代码中,我们使用了

标签的submit按钮来承认删除文件或文件夹操作,但是这里我们增加了对删除服务器上确认,判断文件夹权限,实现了更加安全的删除操作。

总之通过PHP deldir函数是一个非常方便和高效的删除目录或文件的方式,同时也需要注意保护相应的权限和文件夹规则,做好相关的判断和处理,以免出现悲剧的情况。