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 相关文章推荐
使用 php4 加速 web 传输
Oct 09 PHP
PHP获取表单所有复选框的值的方法
Aug 28 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
php实现用手机关闭计算机(电脑)的方法
Apr 22 PHP
php验证码的制作思路和实现方法
Nov 12 PHP
标准版Eclipse搭建PHP环境的详细步骤
Nov 18 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
Jan 14 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
基于php伪静态的实现方法解析
Jul 31 PHP
PHP rsa加密解密算法原理解析
Dec 09 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
PHP.MVC的模板标签系统(五)
2006/09/05 PHP
实用函数9
2007/11/08 PHP
PHP 表单提交给自己
2008/07/24 PHP
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
2014/12/24 PHP
PHP实现的迷你漂流瓶
2015/07/29 PHP
PHP数组实例详解
2016/06/26 PHP
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
Ajax和Comet技术总结
2017/02/19 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
Python实现端口复用实例代码
2014/07/03 Python
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
详解python metaclass(元类)
2020/08/13 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
CSS3 重置iphone浏览器按钮input,select等表单元素的默认样式
2014/10/11 HTML / CSS
美国美妆网站:B-Glowing
2016/10/12 全球购物
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
一套C++笔试题面试题
2012/06/06 面试题
公司承诺书怎么写
2014/05/24 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
大学生活动总结模板
2014/07/02 职场文书
学前教育专业求职信
2014/09/02 职场文书
工作失职检讨书500字
2014/10/17 职场文书
小学数学教师研修日志
2015/11/13 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技