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 相关文章推荐
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 PHP
php中用socket模拟http中post或者get提交数据的示例代码
Aug 08 PHP
php操作mysqli(示例代码)
Oct 28 PHP
php实现图片添加水印功能
Feb 13 PHP
PHP has encountered a Stack overflow问题解决方法
Nov 03 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 PHP
PHP编程中尝试程序并发的几种方式总结
Mar 21 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 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
第二节--PHP5 的对象模型
2006/11/16 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
2009/11/26 Javascript
基于jquery的时间段实现代码
2012/08/02 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
js获取浏览器基本信息大全
2014/11/27 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
Javascript中内建函数reduce的应用详解
2016/10/20 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
Vue按需加载的具体实现
2017/12/02 Javascript
在Vue组件上动态添加和删除属性方法
2018/02/23 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
2018/03/27 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
Elasticsearch实现复合查询高亮结果功能
2019/09/10 Javascript
python递归计算N!的方法
2015/05/05 Python
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
OpenCV 边缘检测
2019/07/10 Python
教你如何编写、保存与运行Python程序的方法
2019/07/12 Python
python3.7添加dlib模块的方法
2020/07/01 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
Css3圆角边框制作代码
2015/11/18 HTML / CSS
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
音乐系毕业生自荐信
2013/10/27 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
事业单位聘任报告
2015/03/02 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android