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 相关文章推荐
浅析ThinkPHP中的pathinfo模式和URL重写
Jan 06 PHP
PHP之APC缓存详细介绍 apc模块安装
Jan 13 PHP
yii框架配置默认controller和action示例
Apr 30 PHP
完善CodeIgniter在IDE中代码提示功能的方法
Jul 19 PHP
PHP中使用虚代理实现延迟加载技术
Nov 05 PHP
php使用curl获取https请求的方法
Feb 11 PHP
PHP输入输出流学习笔记
May 12 PHP
Yii2中多表关联查询hasOne hasMany的方法
Feb 15 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
php魔法函数与魔法常量使用介绍
Jul 23 PHP
thinkPHP框架中执行事务的方法示例
May 31 PHP
php+js实现裁剪任意形状图片
Oct 31 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
DOM XPATH获取img src值的query
2013/09/23 PHP
php中adodbzip类实例
2014/12/08 PHP
php中使用GD库做验证码
2016/03/31 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
JavaScript中in和hasOwnProperty区别详解
2017/08/04 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
JS实现的点击按钮图片上下滚动效果示例
2019/01/28 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
js实现简易计算器功能
2019/10/18 Javascript
在vue项目实现一个ctrl+f的搜索功能
2020/02/28 Javascript
js实现移动端轮播图滑动切换
2020/12/21 Javascript
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
Python利用pandas计算多个CSV文件数据值的实例
2018/04/19 Python
Django model.py表单设置默认值允许为空的操作
2020/05/19 Python
如何利用python之wxpy模块玩转微信
2020/08/17 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
美国厨房和园艺工具网上商店:Nestneed
2019/08/24 全球购物
Ref与out有什么不同
2012/11/24 面试题
高二地理教学反思
2014/01/24 职场文书
孝老爱亲模范事迹
2014/01/24 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
城市规划应届毕业生自荐信
2014/07/04 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
求职自荐信怎么写
2015/03/04 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers