php实现统计目录文件大小的函数


Posted in PHP onDecember 25, 2015

早上刚到公司,头告诉我,抓紧写一个小函数,用来统计指定目录中文件大小,我了个去,动手吧,还好有点小基础,一会就完工了,哈哈。代码在下面咯。

<? 
/** 
 统计目录文件大小的函数 
 @author xfcode 
*/ 
 function dirsize($dir) 
 { 
 @$dh = opendir($dir); 
 $size = 0; 
 while ($file = @readdir($dh)) 
{ 
  if ($file != "." and $file != "..") 
 { 
 $path = $dir."/".$file; 
  if (is_dir($path)) 
 { 
 $size += dirsize($path); 
  } 
 elseif (is_file($path)) 
 { 
 $size += filesize($path); 
  } 
  } 
 } 
  @closedir($dh); 
  return $size; 
 } 
//function end 
 
//eg: 
 $dir_path = "./my_files"; 
 $dir_size = dirsize($dir_path); 
 $dir_size = $dir_size/1024/1024; 
 echo $dir_size."MB"; 
 ?>

这个函数可以递归遍历目录中的所有文件,并计算以MB为单位的文件总大小。

下面我们再来看个代码

<?php
 #循环遍历目录中所有的文件,并统计目录和文件的大小
 $dirName="phpMyAdmin";
 $dir=opendir($dirName); #返回一个资源类型
 while($fileName=readdir($dir)){
 $file=$dirName."/".$fileName;
 if($fileName!="." && $fileName!=".."){
  if(is_dir($file)){
  echo "<font color='red'>".$fileName."===".date("Y-m-d H:i:s",filectime($file))."==".filetype($file)."==".toSize(dirSize($file))."</font><br/>";
  }
  else{
  echo "<font color='green'>".$fileName."=====".date("Y-m-d H:i:s",filectime($file))."====".filetype($file)."====".toSize(filesize($file))."</font><br/>";
  }
 }
 }
 closedir($dir);
 
 #把文件或目录的大小转化为容易读的方式
 function toSize($size){
 $dw; #指定文件或目录统计的单位方式
 if($size>pow(2,30)){
  $dw="GB";
  $size=round($size/pow(2,30),2);
 }
 else if($size>pow(2,20)){
  $dw="MB";
  $size=round($size/pow(2,20),2);
 }
 else if($size>pow(2,10)){
  $dw="KB";
  $size=round($size/pow(2,10),2);
 }
 else
 {
  $dw="bytes";
 }
 return $size.$dw;
 }

 #利用递归的方式统计目录的大小
 function dirSize($dirName){
 $dirsize=0;
 $dir=opendir($dirName);
 while($fileName=readdir($dir)){
  $file=$dirName."/".$fileName;
  if($fileName!="." && $fileName!=".."){   //一定要进行判断,否则会出现错误的
  if(is_dir($file)){
   $dirsize+=dirSize($file);
  }
  else{
   $dirsize+=filesize($file);
  }
  }
 }
 closedir($dir);
 return $dirsize;
 }
?>
PHP 相关文章推荐
桌面中心(一)创建数据库
Oct 09 PHP
傻瓜化配置PHP环境――Appserv
Dec 13 PHP
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
php 文章采集正则代码
Dec 28 PHP
将一维或多维的数组连接成一个字符串的php代码
Aug 08 PHP
PHP 自定义错误处理函数的使用详解
May 10 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
详解PHP中的序列化、反序列化操作
Mar 21 PHP
PHP addAttribute()函数讲解
Feb 03 PHP
PHP htmlentities()函数用法讲解
Feb 25 PHP
PHP程序员必须知道的两种日志实例分析
May 14 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 #PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 #PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
Dec 24 #PHP
PHP实现文件上传和多文件上传
Dec 24 #PHP
纯PHP代码实现支付宝批量付款
Dec 24 #PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 #PHP
4种PHP异步执行的常用方式
Dec 24 #PHP
You might like
转生史莱姆:萌王第一次撸串开心到飞起,哥布塔撸串却神似界王神
2018/11/30 日漫
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
Smarty的配置与高级缓存技术分享
2012/06/05 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
JS 分号引起的一段调试问题
2009/06/18 Javascript
javascript 二分法(数组array)
2010/04/24 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
在一般处理程序(ashx)中弹出js提示语
2017/08/16 Javascript
js微信分享实现代码
2020/10/11 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
解决angular双向绑定无效果,ng-model不能正常显示的问题
2018/10/02 Javascript
javascript对HTML字符转义与反转义
2018/12/13 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
2020/09/10 Javascript
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在Python中使用swapCase()方法转换大小写的教程
2015/05/20 Python
编写Python爬虫抓取暴走漫画上gif图片的实例分享
2016/04/20 Python
python构建自定义回调函数详解
2017/06/20 Python
解决python删除文件的权限错误问题
2018/04/24 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
异常和异常类的概念
2014/09/12 面试题
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
出纳岗位职责
2013/11/09 职场文书
建筑工程管理专业自荐信范文
2013/12/28 职场文书
酒店拾金不昧表扬信
2014/01/18 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
历史学专业求职信
2014/06/19 职场文书
《爱的教育》读书心得
2014/11/08 职场文书
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android