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脚本的10个技巧(2)
Oct 09 PHP
php开发环境配置记录
Jan 14 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
探讨fckeditor在Php中的配置详解
Jun 08 PHP
Smarty变量调节器失效的解决办法
Aug 20 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
Feb 02 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 PHP
php的扩展写法总结
May 14 PHP
PHP7新增函数
Mar 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
PHP简洁函数小结
2011/08/12 PHP
PHP实现显示照片exif信息的方法
2014/07/11 PHP
tp5框架前台无限极导航菜单类实现方法分析
2020/03/29 PHP
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
select 控制网页内容隐藏于显示的实现代码
2010/05/25 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
js限制文本框为整数和货币的函数代码
2010/10/13 Javascript
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
react-router实现按需加载
2017/05/09 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
2017/04/24 Python
Python实现动态加载模块、类、函数的方法分析
2017/07/18 Python
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
2019/01/26 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
草船借箭教学反思
2014/02/03 职场文书
药剂专业个人求职信范文
2014/04/29 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
学历证明样本
2015/06/16 职场文书
借钱欠条怎么写
2015/07/03 职场文书
python中对列表的删除和添加方法详解
2022/02/24 Python