PHP递归删除非空目录的函数示例
58 浏览量
更新于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-10-23 上传
2020-10-17 上传
2020-10-25 上传
2020-10-26 上传
2020-12-18 上传
weixin_38558623
- 粉丝: 4
- 资源: 930
最新资源
- Angular程序高效加载与展示海量Excel数据技巧
- Argos客户端开发流程及Vue配置指南
- 基于源码的PHP Webshell审查工具介绍
- Mina任务部署Rpush教程与实践指南
- 密歇根大学主题新标签页壁纸与多功能扩展
- Golang编程入门:基础代码学习教程
- Aplysia吸引子分析MATLAB代码套件解读
- 程序性竞争问题解决实践指南
- lyra: Rust语言实现的特征提取POC功能
- Chrome扩展:NBA全明星新标签壁纸
- 探索通用Lisp用户空间文件系统clufs_0.7
- dheap: Haxe实现的高效D-ary堆算法
- 利用BladeRF实现简易VNA频率响应分析工具
- 深度解析Amazon SQS在C#中的应用实践
- 正义联盟计划管理系统:udemy-heroes-demo-09
- JavaScript语法jsonpointer替代实现介绍