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 静态变量的初始化
Nov 15 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
php中全局变量global的使用演示代码
May 18 PHP
php获取文件内容最后一行示例
Jan 09 PHP
php递归函数中使用return的注意事项
Jan 17 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
一个图片地址分解程序(用于PHP小偷程序)
Aug 23 PHP
php实现的任意进制互转类分享
Jul 07 PHP
php实现遍历文件夹的方法汇总
Mar 02 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
详解关于php的xdebug配置(编辑器vscode)
Jan 29 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 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的memory_limit限制的方法分享
2012/02/21 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
PHP的Yii框架中行为的定义与绑定方法讲解
2016/03/18 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
php对象工厂类完整示例
2018/08/09 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
仿新浪微博登陆邮箱提示效果的js代码
2013/08/02 Javascript
jquery 设置元素相对于另一个元素的top值(实例代码)
2013/11/06 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
Vue常用指令详解分析
2018/08/19 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
微信小程序的tab选项卡的实现效果
2019/05/15 Javascript
js实现九宫格抽奖
2020/03/19 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
python常见排序算法基础教程
2017/04/13 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
行政管理专业推荐信
2013/11/02 职场文书
婚礼证婚人证婚词
2014/01/13 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
如何开发一个渐进式Web应用程序PWA
2021/05/10 Javascript
JavaScript实现简单拖拽效果
2021/09/15 Javascript