zoukankan      html  css  js  c++  java
  • PHP文件大小格式化函数合集

    比如碰到一个很大的文件有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()函数获得文件的字节数,再用上面的这些函数换算成适当的单位就可以了

  • 相关阅读:
    BUUCTF--Youngter-drive
    BUUCTF--CrackRTF
    FireShell CTF 2020 Re Simple Encryption
    2020 美国大学生数学建模论文翻译(week 2)
    仿射密码
    乘法逆元
    RC4加密与解密
    2020 BJDCTF Re encode
    2020美国大学生数学建模(MCM/ICM)A题数据及参考资料
    路由器, 美团笔试题, 差分
  • 原文地址:https://www.cnblogs.com/lucktian/p/5573713.html
Copyright © 2011-2022 走看看