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 print类函数使用总结
Jun 25 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
Dec 19 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
PHP封装分页函数实现文本分页和数字分页
Oct 23 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
php自动更新版权信息显示的方法
Jun 19 PHP
PHP使用curl制作简易百度搜索
Nov 03 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
PHP操作Redis常用技巧总结
Apr 24 PHP
PHP实现微信小程序用户授权的工具类示例
Mar 05 PHP
laravel 出现command not found问题的解决方案
Oct 23 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按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
Windows下的PHP安装pear教程
2014/10/24 PHP
微信封装的调用微信签名包的类库
2017/06/08 PHP
PHP实现的简单在线计算器功能示例
2017/08/02 PHP
理解Javascript_15_作用域分配与变量访问规则,再送个闭包
2010/10/20 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
JavaScript中instanceof与typeof运算符的用法及区别详细解析
2013/11/19 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
JS实现文档加载完成后执行代码
2015/07/09 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
jQuery模拟窗口抖动效果
2017/03/15 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
Vue Echarts实现可视化世界地图代码实例
2019/05/07 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
uniapp开发小程序实现滑动页面控制元素的显示和隐藏效果
2020/12/10 Javascript
Java 生成随机字符的示例代码
2021/01/13 Javascript
简单谈谈Python中函数的可变参数
2016/09/02 Python
Python中py文件转换成exe可执行文件的方法
2019/06/14 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
Stylenanda中文站:韩国一线网络服装品牌
2016/12/22 全球购物
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
Currentbody澳大利亚:美容仪专家
2019/11/11 全球购物
质检员岗位职责
2013/12/17 职场文书
一年级数学教学反思
2014/02/01 职场文书
《最可爱的人》教学反思
2014/02/14 职场文书
政治思想表现评语
2014/05/04 职场文书
办理房产证委托书
2014/09/18 职场文书
三年级学生评语大全
2014/12/26 职场文书
武当山导游词
2015/02/03 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
2015中学政教处工作总结
2015/07/22 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python