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 相关文章推荐
在IIS7.0下面配置PHP 5.3.2运行环境的方法
Apr 13 PHP
PHP获取http请求的头信息实现步骤
Dec 16 PHP
PHP提示Cannot modify header information - headers already sent by解决方法
Sep 22 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
PHP中的一些常用函数收集
May 26 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
php中时间函数date及常用的时间计算
May 12 PHP
微信接口生成带参数的二维码
Jul 31 PHP
PHP异常类及异常处理操作实例详解
Dec 19 PHP
PHP PDOStatement::fetchColumn讲解
Jan 31 PHP
php中get_object_vars()在数组的实例用法
Feb 22 PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 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&amp;mysql(二)
2006/10/09 PHP
php session 错误
2009/05/21 PHP
CentOS6.5 编译安装lnmp环境
2014/12/21 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
PHP使用Pthread实现的多线程操作实例
2015/11/14 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
js 判断浏览器类型 去全角、半角空格 自动关闭当前窗口
2009/04/10 Javascript
jQuery插件 tabBox实现代码
2010/02/09 Javascript
javascript在事件监听方面的兼容性小结
2010/04/07 Javascript
原生js仿jquery实现对Ajax的封装
2016/10/04 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
Python的Flask框架与数据库连接的教程
2015/04/20 Python
Python实现图像几何变换
2015/07/06 Python
Python 通过pip安装Django详细介绍
2017/04/28 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
2017/07/08 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
Python实现DDos攻击实例详解
2019/02/02 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
Python 忽略文件名编码的方法
2020/08/01 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
简洁自适应404页面HTML好看的404源码
2020/12/16 HTML / CSS
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
安全标准化汇报材料
2014/02/03 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
经济担保书范文
2014/04/02 职场文书
节能减耗标语
2014/06/21 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js