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 Mssql操作简单封装支持存储过程
Dec 11 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
smarty中post用法实例
Nov 28 PHP
php页面函数设置超时限制的方法
Dec 01 PHP
WampServer下安装多个版本的PHP、mysql、apache图文教程
Jan 07 PHP
php数组使用规则分析
Feb 27 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
Yii2中如何使用modal弹窗(基本使用)
May 30 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
Jul 18 PHP
PHP-X系列教程之内置函数的使用示例
Oct 16 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
关于Laravel参数验证的一些疑与惑
Nov 19 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
AngularJs bootstrap详解及示例代码
2016/09/01 Javascript
BootStrap入门教程(二)之固定的内置样式
2016/09/19 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
vue v-for 使用问题整理小结
2019/08/04 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
[01:34]完美“圣”典宣传片震撼发布,12.17与你不见不散
2016/12/16 DOTA
python 字符串和整数的转换方法
2018/06/25 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
教师评优的个人自我评价分享
2013/09/19 职场文书
优秀求职信范文分享
2014/01/26 职场文书
聘任书模板
2014/03/29 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
工作岗位职责范本
2015/02/15 职场文书
2015年清明节演讲稿范文
2015/03/17 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android
python标准库ElementTree处理xml
2022/05/20 Python