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 相关文章推荐
Smarty结合Ajax实现无刷新留言本实例
Jan 02 PHP
PHP 函数执行效率的小比较
Oct 17 PHP
PHP小技巧之函数重载
Jun 02 PHP
php短网址和数字之间相互转换的方法
Mar 13 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
PHP常用的小程序代码段
Nov 14 PHP
PHP读取PPT文件的方法
Dec 10 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
Thinkphp3.2实用篇之计算型验证码示例
Feb 09 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 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
基于文本的访客签到簿
2006/10/09 PHP
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
基于php无限分类的深入理解
2013/06/02 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
javascript各种复制代码收集
2008/09/20 Javascript
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
node.js中的fs.truncateSync方法使用说明
2014/12/15 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
vue-lazyload使用总结(推荐)
2018/11/01 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
2018/11/14 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
微信小程序wxml列表渲染原理解析
2019/11/27 Javascript
[01:08]DOTA2次级职业联赛 - Wings 战队宣传片
2014/12/01 DOTA
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
十条建议帮你提高Python编程效率
2016/02/16 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
2020/08/07 Python
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
新春文艺演出主持词
2014/03/27 职场文书
高考学习决心书
2015/02/04 职场文书
士兵突击观后感
2015/06/16 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python
Python中第三方库Faker的使用详解
2022/04/02 Python
图神经网络GNN算法
2022/05/11 Python