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 输出简单动态WAP页面
Jun 09 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
PHP三元运算的2种写法代码实例
May 12 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
Jun 26 PHP
php输出xml必须header的解决方法
Oct 17 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
typecho插件编写教程(三):保存配置
May 28 PHP
ThinkPHP里用U方法调用js文件实例
Jun 18 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
Sep 29 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
PHP实现简单的计算器
Aug 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删除数组中的特定元素的代码
2012/06/28 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
js动态添加事件并可传参数示例代码
2013/10/21 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
jQuery实现仿新浪微博浮动的消息提示框(可智能定位)
2015/10/10 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
详解使用mocha对webpack打包的项目进行&quot;冒烟测试&quot;的大致流程
2020/04/27 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
售后主管岗位职责
2013/12/08 职场文书
好人好事事迹材料
2014/02/12 职场文书
报纸媒体创意广告词
2014/03/17 职场文书
加油口号大全
2014/06/13 职场文书
商场促销活动策划方案
2014/08/18 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
详解Redis主从复制实践
2021/05/19 Redis