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 相关文章推荐
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
深入解析PHP的引用计数机制
Jun 14 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
Dec 03 PHP
PHP检测字符串是否为UTF8编码的常用方法
Nov 21 PHP
php获取错误信息的方法
Jul 17 PHP
php限制文件下载速度的代码
Oct 20 PHP
YII2.0之Activeform表单组件用法实例
Jan 09 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 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
用PHP4访问Oracle815
2006/10/09 PHP
缓存技术详谈―php
2006/12/14 PHP
php单例模式实现(对象只被创建一次)
2012/12/05 PHP
php 注册时输入信息验证器的实现详解
2013/07/05 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
2019/10/21 PHP
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
html组件不可输入(只读)同时任何组件都有效
2013/04/01 Javascript
javascript调试过程中找不到哪里出错的可能原因
2013/12/16 Javascript
使用jQuery时Form表单元素ID和name命名大忌
2014/03/06 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
Angular4实现动态添加删除表单输入框功能
2017/08/11 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
python函数局部变量用法实例分析
2015/08/04 Python
python实现井字棋游戏
2020/03/30 Python
Python实现感知器模型、两层神经网络
2017/12/19 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
详解django自定义中间件处理
2018/11/21 Python
Python实现多属性排序的方法
2018/12/05 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
Django 响应数据response的返回源码详解
2019/08/06 Python
Python图像读写方法对比
2020/11/16 Python
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
四风自我剖析材料
2014/09/30 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android