PHP统计目录大小的自定义函数分享


Posted in PHP onNovember 18, 2014

计算文件、磁盘分区和目录的大小在各种应用程序中都是常见的任务。计算文件的大小可以通过前面介绍过的filesize()函数完成,统计磁盘大小也可以使用disk_free_space()和disk_total_space()两个函数实现。但PHP目前并没有提供目录总大小的标准函数,因此我们要自定义一个函数来完成这个任务。首先要考虑计算的目录中有没有包含其他子目录的情况,如果没有子目录,目录下所有文件的大小相加后的总和就是这个目录的大小。如果包含子目录,就按照这个方法再计算一下子目录的大小,使用递归函数看来最适合此项任务。计算目录大小的自定义函数如下所示:

<?php

//自定义一个函数dirSize(),统计传入参数的目录大小

function dirSize($directory){

  $dir_size = 0; //用来累加各个文件大小

 

  if($dir_handle = @opendir($directory)){      //打开目录,并判断是否能成功打开

    while($filename = readdir($dir_handle)){     //循环遍历目录下的所有文件

        if($filename != "."&& $filename != ".."){     //一定要排除两个特殊的目录

            $subFile = $directory."/".$filename;     //将目录下的子文件和当前目录相连

            if(is_dir($subFile))     //如果为目录

            $dir_size += dirSize($subFile);     //递归地调用自身函数,求子目录的大小

            if(is_file($subFile))     //如果是文件

            $dir_size += filesize($subFile);     //求出文件的大小并累加

        }

    }

    closedir($dir_handle);      //关闭文件资源

    return $dir_size;     //返回计算后的目录大小

  }

}

 

$dir_size = dirSize("phpMyAdmin");    //调用该函数计算目录大小

echo round($dir_size/pow(1024,1),2)."KB";    //字节数转换为“KB”单位并输出

?>

也可以使用exec()或system()函数调用操作系统命令“du”来返回目录的大小。但出于安全原因,这些函数通常是禁用的,而且不利于跨平台操作。

PHP 相关文章推荐
PHP新手上路(十三)
Oct 09 PHP
php Memcache 中实现消息队列
Nov 24 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
Jun 24 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
ThinkPHP多语言支持与多模板支持概述
Aug 22 PHP
PHP自定义多进制的方法
Nov 03 PHP
PHP二维数组去重实例分析
Nov 18 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
Laravel用户授权系统的使用方法示例
Sep 16 PHP
PHP 文件上传限制问题
Sep 01 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
Sep 10 PHP
laravel7学习之无限级分类的最新实现方法
Sep 30 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
Nov 18 #PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 #PHP
PHP打开和关闭文件操作函数总结
Nov 18 #PHP
PHP文件读写操作相关函数总结
Nov 18 #PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 #PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 #PHP
PHP文件锁函数flock()详细介绍
Nov 18 #PHP
You might like
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
PHP守护进程化在C和PHP环境下的实现
2017/11/21 PHP
实例解析php的数据类型
2018/10/24 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
js 数组去重的四种实用方法
2014/09/09 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
2016/02/28 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
python zip文件 压缩
2008/12/24 Python
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
HTML5 文件域+FileReader 分段读取文件并上传到服务器
2017/10/23 HTML / CSS
如何清空Session
2015/02/23 面试题
大学毕业后的十年规划
2014/01/07 职场文书
个人近期表现材料
2014/02/11 职场文书
2014年学习雷锋活动总结
2014/03/01 职场文书
村干部承诺书
2014/03/28 职场文书
岗位竞聘书范文
2014/03/31 职场文书
国旗下演讲稿
2014/05/08 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
节水倡议书
2015/01/19 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
Pytorch中使用ImageFolder读取数据集时忽略特定文件
2022/03/23 Python