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

  • 相关阅读:
    NTP on FreeBSD 12.1
    Set proxy server on FreeBSD 12.1
    win32 disk imager使用后u盘容量恢复
    How to install Google Chrome Browser on Kali Linux
    Set NTP Service and timezone on Kali Linux
    Set static IP address and DNS on FreeBSD
    github博客标题显示不了可能是标题包含 特殊符号比如 : (冒号)
    server certificate verification failed. CAfile: none CRLfile: none
    删除文件和目录(彻底的)
    如何在Curl中使用Socks5代理
  • 原文地址:https://www.cnblogs.com/lucktian/p/5573713.html
Copyright © 2011-2022 走看看