首页 > 语言 > PHP > 正文

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

2024-09-04 11:43:25
字体:大 中 小
来源:转载
供稿:网友

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表