www.adminn.cn
站长正能量分享网!

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

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

php中有一个系统自带的计算文件大小的函数,就是filesize(),但是这个函数是以字节为单位的,在一些情况下,我们需要很直观的了解一个文件大小,就不仅仅需要字节B这个单位了,还需要KB,MB,GB,甚至更大TB,PB,所以我们需要自己写一些函数来格式化filesize()的输出结果。

比如碰到一个很大的文件有49957289167B,大家一看这么一长串的数字后面单位是字节B,还是不知道这个文件的大小是一个什么概念,我们把它转换成GB为单位,就是46.53GB。用下面这些函数就可以完成这个工作:

  1. //转换单位 
  2. function setupSize($fileSize) { 
  3.     $size = sprintf("%u"$fileSize); 
  4.     if($size == 0) { 
  5.          return("0 Bytes"); 
  6.     } 
  7.     $sizename = array(" Bytes"" KB"" MB"" GB"" TB"" PB"" EB"" ZB"" YB"); 
  8.     return round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizename[$i]; 
  9. function byte_format($size$dec=2){ 
  10.     $a = array("B""KB""MB""GB""TB""PB"); 
  11.     $pos = 0; 
  12.     while ($size >= 1024) { 
  13.          $size /= 1024; 
  14.            $pos++; 
  15.     } 
  16.     return round($size,$dec)." ".$a[$pos]; 
  17.  } 
  18. /* Use : echo format_size(filesize("fichier")); 
  19. Example result : 13,37 Ko */ 
  20.  
  21. function format_size($o) { 
  22.     $size = array('Go' => 1073741824, 'Mo' => 1048576, 'Ko' => 1024, 'octets' => 1); 
  23.     foreach ($size as $k => $v
  24.         if ($o >= $v) { 
  25.                 if ($k == 'octets'
  26.                         return round($o).' '.$k
  27.                 return number_format($o / $v, 2, ','' ').' '.$k
  28.         } 
  29. /** 
  30.  * 文件大小格式化 
  31.  * @param integer $size 初始文件大小,单位为byte 
  32.  * @return array 格式化后的文件大小和单位数组,单位为byte、KB、MB、GB、TB 
  33.  */ 
  34. function file_size_format($size = 0, $dec = 2) { 
  35.     $unit = array("B""KB""MB""GB""TB""PB"); 
  36.     $pos = 0; 
  37.     while ($size >= 1024) { 
  38.         $size /= 1024; 
  39.         $pos++; 
  40.     } 
  41.     $result['size'] = round($size$dec); 
  42.     $result['unit'] = $unit[$pos]; 
  43.     return $result['size'].$result['unit']; 
  44. echo file_size_format(123456789); 
  45.  
  46. /** 
  47.  * 文件大小单位格式化 
  48.  * @param $bytes 文件实际大小,单位byte 
  49.  * @param $prec 转换后精确度,默认精确到小数点后两位 
  50.  * @return 转换后的大小+单位的字符串 
  51.  */ 
  52.  function fsizeformat($bytes,$prec=2){ 
  53.     $rank=0; 
  54.     $size=$bytes
  55.     $unit="B"
  56.     while($size>1024){ 
  57.         $size=$size/1024; 
  58.         $rank++; 
  59.     } 
  60.     $size=round($size,$prec); 
  61.     switch ($rank){ 
  62.         case "1"
  63.             $unit="KB"
  64.             break
  65.         case "2"
  66.             $unit="MB"
  67.             break
  68.         case "3"
  69.             $unit="GB"
  70.             break
  71.         case "4"
  72.             $unit="TB"
  73.             break
  74.         default : 
  75.  
  76.     } 
  77.     return $size." ".$unit
  78.  } 
  79.  
  80. /**  
  81.  *  容量格式化  
  82.  * @param String   文件名(文件路径)  
  83.  * @return  如果文件存在返回格式化的字符串 如果错误返回错误信息  Unknown File  
  84.  */   
  85. function sizeFormat ($fileName){   
  86.     //获取文件的大小   
  87.     @ $filesize=filesize($fileName);   
  88.     //如果文件不存在返回错误信息   
  89.     if(false==$filesize){   
  90.        return 'Unknown File';   
  91.     } 
  92.     //格式化文件容量信息   
  93.     if ($filesize >= 1073741824) $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB';   
  94.     elseif ($filesize >= 1048576) $filesize = round($filesize / 1048576 * 100) / 100 . ' MB';   
  95.     elseif ($filesize >= 1024) $filesize = round($filesize / 1024 * 100) / 100 . ' KB';   
  96.     else $filesize = $filesize . ' Bytes';   
  97.     return $filesize;   
  98. //测试函数   
  99. echo sizeFormat('config.inc.php');   
  100.  
  101. /** 
  102.   * 文件大小格式化 
  103.   * @param type $filesize 
  104.   */ 
  105. private function sizeCount($filesize
  106.     if ($filesize >= 1073741824) { 
  107.         $filesize = round($filesize / 1073741824 * 100) / 100 . ' GB'
  108.     }  
  109.  
  110.     else if ($filesize >= 1048576) { 
  111.         $filesize = round($filesize / 1048576 * 100) / 100 . ' MB'
  112.     }  
  113.  
  114.     else if ($filesize >= 1024) { 
  115.         $filesize = round($filesize / 1024 * 100) / 100 . ' KB'
  116.     } 
  117.  
  118.     return $filesize
  119.  
  120.  
  121. //该函数最主要的是根据文件的字节数,判断应当选择的统计单位,也就是说一个文件用某一单位比如MB,那么该文件肯定小于1GB,否则当然要用GB作为单位了,而且文件要大于KB,不然的话得用更小的单位统计。该函数代码如下 
  122.  
  123. //size()  统计文件大小 
  124. function size($byte
  125.     if($byte < 1024) { 
  126.       $unit="B"
  127.     } 
  128.     else if($byte < 10240) { 
  129.       $byte=round_dp($byte/1024, 2); 
  130.       $unit="KB"
  131.     } 
  132.     else if($byte < 102400) { 
  133.       $byte=round_dp($byte/1024, 2); 
  134.       $unit="KB"
  135.     } 
  136.     else if($byte < 1048576) { 
  137.       $byte=round_dp($byte/1024, 2); 
  138.       $unit="KB"
  139.     } 
  140.     else if ($byte < 10485760) { 
  141.       $byte=round_dp($byte/1048576, 2); 
  142.       $unit="MB"
  143.     } 
  144.     else if ($byte < 104857600) { 
  145.       $byte=round_dp($byte/1048576,2); 
  146.       $unit="MB"
  147.     } 
  148.     else if ($byte < 1073741824) { 
  149.       $byte=round_dp($byte/1048576, 2); 
  150.       $unit="MB"
  151.     } 
  152.     else { 
  153.       $byte=round_dp($byte/1073741824, 2); 
  154.       $unit="GB"
  155.     } 
  156.  
  157.     $byte .= $unit
  158.     return $byte
  159. //phpfensi.com 
  160. //辅助函数 round_up(),该函数用来取舍小数点位数的,四舍五入。 
  161. function round_dp($num , $dp
  162.   $sh = pow(10 , $dp); 
  163.   return (round($num*$sh)/$sh); 

这样我们就能很好额统计任何一个文件的大小了,首先通过系统自带的filesize()函数获得文件的字节数,再用上面的这些函数换算成适当的单位就可以了。

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《PHP文件大小格式化函数合集》
文章链接:https://www.adminn.cn/news/6818.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

Adminn.Cn 站长分享圈

帝国CMS精品模板腾讯云优惠券,代金券

本站源码仅供本地环境下学习借鉴研究使用!

源码请勿用于任何涉灰站点!净化网络,站长更有责!

支付宝扫一扫打赏