PHP递归删除非空目录的函数示例
159 浏览量
更新于2024-08-30
收藏 48KB PDF 举报
"PHP递归删除目录的代码实例和方法"
在PHP编程中,删除目录是一项常见的任务,尤其是处理用户上传的文件或清理临时文件时。当需要删除的目录不为空时,单纯使用`rmdir()`函数是无法完成的,因为它只能删除空目录。为了删除包含文件和子目录的整个目录结构,我们需要采用递归方法。以下是两个PHP递归删除目录的实例,它们可以帮助我们理解并实现这一功能。
实例一:
这个实例中定义了一个名为`deletedir()`的函数,它首先检查要打开的目录是否存在。然后,通过`readdir()`遍历目录中的每个文件或子目录。如果遇到的不是当前目录(".")和父目录(".."),它会进一步处理。对于子目录,再次调用`deletedir()`函数进行递归删除;对于文件,使用`unlink()`函数尝试删除。最后,当所有文件和子目录都被删除后,尝试使用`rmdir()`删除原始目录。
```php
function deletedir($dir) {
if (!($handle = opendir($dir))) {
die("没有该目录");
}
while (false !== ($file = readdir($handle))) {
if ($file !== "." && $file !== "..") {
$file = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($file)) {
deletedir($file);
} else {
if (@unlink($file)) {
echo "文件$file删除成功。<br>";
} else {
echo "文件$file删除失败!<br>";
}
}
}
}
if (@rmdir($dir)) {
echo "目录$dir删除成功了。<br>\n";
} else {
echo "目录$dir删除失败!<br>\n";
}
}
```
实例二:兼容中文目录和文件的递归删除方法
这个实例考虑到了可能存在的中文目录和文件名,使用`mb_detect_encoding()`检测目录的编码,并通过`iconv()`进行转换,确保在不同编码环境下能正常工作。函数`delete_dir()`执行的逻辑与第一个实例类似,只是增加了对编码的处理。
```php
function delete_dir($tmp_path) {
if (!is_writable($tmp_path) && is_dir($tmp_path)) {
chmod($tmp_path, 0777);
}
$encode = mb_detect_encoding($tmp_path, array('UTF-8', 'GB2312', 'ASCII', 'GBK'));
$tmp_path = iconv($encode, 'gb2312', $tmp_path);
// ...其他代码(类似于实例一的逻辑)...
}
```
这两个实例展示了如何在PHP中编写递归函数来删除非空目录及其所有内容,包括子目录和文件。在实际应用中,应当注意处理可能出现的错误,如权限问题、文件锁等,以确保程序的健壮性。同时,谨慎操作此类功能,因为它们具有破坏性,一旦运行,可能无法恢复删除的数据。在删除前,最好先备份重要数据,以防万一。
2020-10-18 上传
2020-12-18 上传
2020-10-18 上传
2020-10-23 上传
2020-10-17 上传
2020-10-25 上传
2020-10-26 上传
2020-12-18 上传
2020-12-19 上传
weixin_38558623
- 粉丝: 4
- 资源: 930
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明