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 相关文章推荐
使用数据库保存session的方法
Oct 09 PHP
php获取网页内容方法总结
Dec 04 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
Oct 31 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
PHP实现阳历到农历转换的类实例
Mar 07 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
Yii框架中jquery表单验证插件用法示例
Oct 18 PHP
thinkphp 手机号和用户名同时登录
Jan 20 PHP
详解php几行代码实现CSV格式文件输出
Jul 01 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
php的$_FILES的临时储存文件与回收机制实测过程
2013/07/12 PHP
php实现网页缓存的工具类分享
2015/07/14 PHP
php类自动加载器实现方法
2015/07/28 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
js实现可得到不同颜色值的颜色选择器实例
2015/02/28 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
在nodejs中创建child process的方法
2021/01/26 NodeJs
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
python验证码识别的实例详解
2016/09/09 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
python定时关机小脚本
2018/06/20 Python
用python生成1000个txt文件的方法
2018/10/25 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
python3 爬取图片的实例代码
2018/11/06 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
python 瀑布线指标编写实例
2020/06/03 Python
python3.5的包存放的具体路径
2020/08/16 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
公司领导推荐信
2013/11/12 职场文书
八年级历史教学反思
2014/01/10 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
酒店厨房管理制度
2015/08/06 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python