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 相关文章推荐
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
解析如何屏蔽php中的phpinfo()函数
Jun 06 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
Jul 28 PHP
PHP上传Excel文件导入数据到MySQL数据库示例
Oct 25 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
Aug 28 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
Dec 21 PHP
laravel框架关于搜索功能的实现
Mar 15 PHP
PHP token验证生成原理实例分析
Jun 05 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
Oct 24 PHP
tp5.1框架数据库子查询操作实例分析
May 26 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
PHP session常见问题集锦及解决办法总结
2007/03/18 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
javascript 写类方式之七
2009/07/05 Javascript
JQuery制作的放大效果的popup对话框(未添加任何jquery plugin)分享
2013/04/28 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
js实现div色块碰撞
2020/01/16 Javascript
js实现随机抽奖
2020/03/19 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
2018/01/03 Python
python同时遍历数组的索引和值的实例
2018/11/15 Python
Python初学者常见错误详解
2019/07/02 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
python实现高斯投影正反算方式
2020/01/17 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
Python基于jieba, wordcloud库生成中文词云
2020/05/13 Python
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
巾帼志愿者活动方案
2014/08/17 职场文书
党委班子对照检查材料
2014/08/19 职场文书
档案工作汇报材料
2014/08/21 职场文书
客户答谢会致辞
2015/01/20 职场文书
物流业务员岗位职责
2015/04/03 职场文书
pytorch MSELoss计算平均的实现方法
2021/05/12 Python