PHP文件大小格式化函数合集

前端技术 2023/09/09 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);
}

本文地址:https://www.stayed.cn/item/25307

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。