PHP文件大小格式化函数合集


Posted in PHP onMarch 10, 2014

比如碰到一个很大的文件有49957289167B,大家一看这么一长串的数字后面单位是字节B,还是不知道这个文件的大小是一个什么概念,我们把它转换成GB为单位,就是46.53GB。用下面这些函数就可以完成这个工作:

//转换单位
function setupSize($fileSize) {
    $size = sprintf("%u", $fileSize);
    if($size == 0) {
         return("0 Bytes");
    }
    $sizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
    return round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizename[$i];
}
function byte_format($size, $dec=2){
    $a = array("B", "KB", "MB", "GB", "TB", "PB");
    $pos = 0;
    while ($size >= 1024) {
         $size /= 1024;
           $pos++;
    }
    return round($size,$dec)." ".$a[$pos];
 }
/* Use : echo format_size(filesize("fichier"));
Example result : 13,37 Ko */
function format_size($o) {
    $size = array('Go' => 1073741824, 'Mo' => 1048576, 'Ko' => 1024, 'octets' => 1);
    foreach ($size as $k => $v)
        if ($o >= $v) {
                if ($k == 'octets')
                        return round($o).' '.$k;
                return number_format($o / $v, 2, ',', ' ').' '.$k;
        }
}
/**
 * 文件大小格式化
 * @param integer $size 初始文件大小,单位为byte
 * @return array 格式化后的文件大小和单位数组,单位为byte、KB、MB、GB、TB
 */
function file_size_format($size = 0, $dec = 2) {
    $unit = array("B", "KB", "MB", "GB", "TB", "PB");
    $pos = 0;
    while ($size >= 1024) {
        $size /= 1024;
        $pos++;
    }
    $result['size'] = round($size, $dec);
    $result['unit'] = $unit[$pos];
    return $result['size'].$result['unit'];
}
echo file_size_format(123456789);
/**
 * 文件大小单位格式化
 * @param $bytes 文件实际大小,单位byte
 * @param $prec 转换后精确度,默认精确到小数点后两位
 * @return 转换后的大小+单位的字符串
 */
 function fsizeformat($bytes,$prec=2){
    $rank=0;
    $size=$bytes;
    $unit="B";
    while($size>1024){
        $size=$size/1024;
        $rank++;
    }
    $size=round($size,$prec);
    switch ($rank){
        case "1":
            $unit="KB";
            break;
        case "2":
            $unit="MB";
            break;
        case "3":
            $unit="GB";
            break;
        case "4":
            $unit="TB";
            break;
        default :
    }
    return $size." ".$unit;
 }
/** 
 *  容量格式化 
 * @param String   文件名(文件路径) 
 * @return  如果文件存在返回格式化的字符串 如果错误返回错误信息  Unknown File 
 */  
function sizeFormat ($fileName){  
    //获取文件的大小  
    @ $filesize=filesize($fileName);  
    //如果文件不存在返回错误信息  
    if(false==$filesize){  
       return 'Unknown File';  
    }
    //格式化文件容量信息  
    if ($filesize >= 1073741824) $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';  
    elseif ($filesize >= 1048576) $filesize = round($filesize / 1048576 * 100) / 100 . ' MB';  
    elseif ($filesize >= 1024) $filesize = round($filesize / 1024 * 100) / 100 . ' KB';  
    else $filesize = $filesize . ' Bytes';  
    return $filesize;  
}
//测试函数  
echo sizeFormat('config.inc.php');  
/**
  * 文件大小格式化
  * @param type $filesize
  */
private function sizeCount($filesize)
{
    if ($filesize >= 1073741824) {
        $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';
    } 
    else if ($filesize >= 1048576) {
        $filesize = round($filesize / 1048576 * 100) / 100 . ' MB';
    } 
    else if ($filesize >= 1024) {
        $filesize = round($filesize / 1024 * 100) / 100 . ' KB';
    }
    return $filesize;
}

//该函数最主要的是根据文件的字节数,判断应当选择的统计单位,也就是说一个文件用某一单位比如MB,那么该文件肯定小于1GB,否则当然要用GB作为单位了,而且文件要大于KB,不然的话得用更小的单位统计。该函数代码如下
//size()  统计文件大小
function size($byte)
{
    if($byte < 1024) {
      $unit="B";
    }
    else if($byte < 10240) {
      $byte=round_dp($byte/1024, 2);
      $unit="KB";
    }
    else if($byte < 102400) {
      $byte=round_dp($byte/1024, 2);
      $unit="KB";
    }
    else if($byte < 1048576) {
      $byte=round_dp($byte/1024, 2);
      $unit="KB";
    }
    else if ($byte < 10485760) {
      $byte=round_dp($byte/1048576, 2);
      $unit="MB";
    }
    else if ($byte < 104857600) {
      $byte=round_dp($byte/1048576,2);
      $unit="MB";
    }
    else if ($byte < 1073741824) {
      $byte=round_dp($byte/1048576, 2);
      $unit="MB";
    }
    else {
      $byte=round_dp($byte/1073741824, 2);
      $unit="GB";
    }
    $byte .= $unit;
    return $byte;
}
//辅助函数 round_up(),该函数用来取舍小数点位数的,四舍五入。
function round_dp($num , $dp)
{
  $sh = pow(10 , $dp);
  return (round($num*$sh)/$sh);
}

这样我们就能很好额统计任何一个文件的大小了,首先通过系统自带的filesize()函数获得文件的字节数,再用上面的这些函数换算成适当的单位就可以了

PHP 相关文章推荐
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
ThinkPHP3.1.3版本新特性概述
Jun 19 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
php session的锁和并发
Jan 22 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
thinkPHP中_initialize方法实例分析
Dec 05 PHP
php使用curl实现简单模拟提交表单功能
May 15 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
PHP+原生态ajax实现的省市联动功能详解
Aug 15 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
php GUID生成函数和类
Mar 10 #PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 #PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 #PHP
php实现文件编码批量转换
Mar 10 #PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 #PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
Mar 08 #PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 #PHP
You might like
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
jquery弹出层类代码分享
2013/12/27 Javascript
jQuery中append()方法用法实例
2014/12/25 Javascript
JavaScript内存管理介绍
2015/03/13 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
2016/02/14 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
Express本地测试HTTPS的示例代码
2018/06/06 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
2019/01/15 Javascript
详解Vue 全局变量,局部变量
2019/04/17 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
[08:08]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY
2014/06/25 DOTA
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
Python中decorator使用实例
2015/04/14 Python
利用ctypes获取numpy数组的指针方法
2019/02/12 Python
Python实现银行账户资金交易管理系统
2020/01/03 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
h5移动端调用支付宝、微信支付的实现
2020/06/08 HTML / CSS
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
酷瑞网络科技面试题
2012/03/30 面试题
日语翻译个人求职的自我评价
2013/10/14 职场文书
委托书模板
2014/04/04 职场文书
神秘岛读书笔记
2015/07/01 职场文书
倡议书怎么写?
2019/04/11 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang