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 相关文章推荐
VML绘图板②脚本--VMLgraph.js、XMLtool.js
Oct 09 PHP
图形数字验证代码
Oct 09 PHP
php str_pad 函数使用详解
Jan 13 PHP
PHP GD 图像处理组件的常用函数总结
Apr 28 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
May 29 PHP
php读取EXCEL文件 php excelreader读取excel文件
Dec 06 PHP
php中的静态变量的基本用法
Mar 20 PHP
写一段简单的PHP建立文件夹代码
Jan 06 PHP
php单例模式示例分享
Feb 12 PHP
大家在抢红包,程序员在研究红包算法
Aug 31 PHP
PHP 配置后台登录以及模板引入
Jan 24 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
May 28 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,ajax实现分页
2008/03/27 PHP
PHP5 面向对象(学习记录)
2009/12/02 PHP
php数组函数序列之end() - 移动数组内部指针到最后一个元素,并返回该元素的值
2011/10/31 PHP
php用正则表达式匹配URL的简单方法
2013/11/12 PHP
php计算函数执行时间的方法
2015/03/20 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
用Jquery实现滚动新闻
2014/02/12 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
实例分析javascript中的call()和apply()方法
2014/11/28 Javascript
javascript数组排序汇总
2015/07/07 Javascript
JavaScript字符串删除重复字符的方法
2015/12/25 Javascript
基于BootStrap环境写jQuery tabs插件
2016/07/12 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
Python 判断文件或目录是否存在的实例代码
2018/07/19 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
如何基于pandas读取csv后合并两个股票
2020/09/25 Python
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
英国评分最高的女性剃须刀订阅盒:FFS Beauty
2018/01/25 全球购物
中学生教师节演讲稿
2014/09/03 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书
感谢信的技巧及范例
2019/05/15 职场文书