本文实例讲述了PHP递归实现文件夹的复制、删除、查看大小操作。分享给大家供大家参考,具体如下:

PHP虽然提供了 filesize、copy、unlink 等文件操作的函数,但是没有提供 dirsize、copydir、rmdirs 等文件夹操作的函数(rmdir也只能删除空目录)。所以只能手动编写这些函数,主要的技巧是通过递归将问题逐层分解,直到分解成可以直接解决的最小子问题。
查看文件夹大小
由于文件夹是没有大小的,平常所说的文件夹尺寸准确的说应该是文件夹中所有文件的总大小。所以只需要将文件夹逐层查找,统计每一层所包含的文件大小,最后将结果从最深的文件夹返回合并。
/**
* 文件夹大小
* @param $path
* @return int
*/
function dirsize($path)
{
$size = 0;
$handle = opendir($path);
while (($item = readdir($handle)) !== false) {
if ($item == '.' || $item == '..') continue;
$_path = $path . '/' . $item;
if (is_file($_path)) $size += filesize($_path);
if (is_dir($_path)) $size += dirsize($_path);
}
closedir($handle);
return $size;
}
复制文件夹
文件是可以复制的,文件夹是不能复制的(但可以创建),如果要达到复制文件夹的效果,就需要生成一个和原始文件夹相同目录结构的新文件夹,然后将文件按照原目录结构复制到新文件夹。按照递归的思想,不用一开始就生成完整的目录结构,只需要遍历当前目录,发现文件夹不存在再创建即可,然后再将文件复制到对应的文件夹。
/**
* 复制文件夹
* @param $source
* @param $dest
*/
function copydir($source, $dest)
{
if (!file_exists($dest)) mkdir($dest);
$handle = opendir($source);
while (($item = readdir($handle)) !== false) {
if ($item == '.' || $item == '..') continue;
$_source = $source . '/' . $item;
$_dest = $dest . '/' . $item;
if (is_file($_source)) copy($_source, $_dest);
if (is_dir($_source)) copydir($_source, $_dest);
}
closedir($handle);
}
删除文件夹
rmdir 只能删除空文件夹,而 unlink 可以删除文件。于是删除文件夹的思路就有了,先通过 unlink 删除目录下的所有文件,再通过 rmdir 删除剩下的空文件夹。使用递归处理的逻辑是,找到当前目录下所有文件和文件夹,删除其中的所有文件,再遍历下一层目录删除所有文件……直至最后一层目录,此时整个文件夹已经没有文件了(但是文件夹还在),此时递归开始返回,每向上返回一层就删除这一层的所有空目录,当返回到最顶层的时候,递归就结束了,同时所有的文件和目录也都删除了。
/**
* 删除文件夹
* @param $path
* @return bool
*/
function rmdirs($path)
{
$handle = opendir($path);
while (($item = readdir($handle)) !== false) {
if ($item == '.' || $item == '..') continue;
$_path = $path . '/' . $item;
if (is_file($_path)) unlink($_path);
if (is_dir($_path)) rmdirs($_path);
}
closedir($handle);
return rmdir($path);
}
剪切文件夹
rename 是 PHP Filesystem 函数中的一个特例,它既可以重命名文件,也可以重命名文件夹。如果你为重命名文件传入不同的路径,它又成了剪切函数,堪称文件函数中小而美的典范。
/** * @param $oldname 必需。规定要重命名的文件或目录。 * @param $newname 必需。规定文件或目录的新名称。 * @param $context 可选。规定文件句柄的环境。 */ rename($oldname,$newname,$context);
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP目录操作技巧汇总》、《php文件操作总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数组(Array)操作技巧大全》及《php字符串(string)用法总结》
希望本文所述对大家PHP程序设计有所帮助。
# PHP
# 递归
# 文件夹
# 复制
# 删除
# 查看大小
# PHP文件及文件夹操作之创建、删除、移动、复制
# PHP创建/删除/复制文件夹、文件
# PHP实现递归复制整个文件夹的类实例
# php删除与复制文件夹及其文件夹下所有文件的实现代码
# PHP操作文件类的函数代码(文件和文件夹创建
# 移动和删除)
# 探讨PHP删除文件夹的三种方法
# PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
# php定时删除文件夹下文件(清理缓存文件)
# php删除文件夹及其文件夹下所有文件的函数代码
# php使用递归与迭代实现快速排序示例
# PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
# 遍历
# 重命名
# 程序设计
# 操作技巧
# 这一
# 如果你
# 成了
# 相关内容
# 目录下
# 还在
# 的说
# 句柄
# 只需
# 感兴趣
# 数据结构
# 给大家
# 也都
# 不存在
# 可以直接
相关文章:
如何访问已购建站主机并解决登录问题?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何快速搭建高效可靠的建站解决方案?
如何在万网主机上快速搭建网站?
浅谈Javascript中的Label语句
如何通过智能用户系统一键生成高效建站方案?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
如何注册花生壳免费域名并搭建个人网站?
建站上市公司网站建设方案与SEO优化服务定制指南
建站主机如何安装配置?新手必看操作指南
打鱼网站制作软件,波克捕鱼官方号怎么注册?
,想在网上投简历,哪几个网站比较好?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
c++怎么用jemalloc c++替换默认内存分配器【性能】
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
如何在阿里云部署织梦网站?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何选择CMS系统实现快速建站与SEO优化?
建站之星如何配置系统实现高效建站?
建站之星后台密码遗忘?如何快速找回?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
建站之星备案是否影响网站上线时间?
5种Android数据存储方式汇总
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
Android滚轮选择时间控件使用详解
重庆网站制作公司哪家好,重庆中考招生办官方网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
子杰智能建站系统|零代码开发与AI生成SEO优化指南
建站之星免费版是否永久可用?
如何在Windows服务器上快速搭建网站?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
c# 服务器GC和工作站GC的区别和设置
C#如何使用XPathNavigator高效查询XML
如何批量查询域名的建站时间记录?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
建站之星如何实现网站加密操作?
如何在景安服务器上快速搭建个人网站?
如何获取PHP WAP自助建站系统源码?
北京专业网站制作设计师招聘,北京白云观官方网站?
非常酷的网站设计制作软件,酷培ai教育官方网站?
建站主机功能解析:服务器选择与快速搭建指南
如何制作算命网站,怎么注册算命网站?
常州自助建站工具推荐:低成本搭建与模板选择技巧
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
智能起名网站制作软件有哪些,制作logo的软件?
如何快速搭建响应式可视化网站?
高性价比服务器租赁——企业级配置与24小时运维服务
如何使用Golang安装API文档生成工具_快速生成接口文档
手机网站制作与建设方案,手机网站如何建设?
*请认真填写需求信息,我们会在24小时内与您取得联系。