加入收藏 | 设为首页 | 会员中心 | 我要投稿 济宁站长网 (https://www.0537zz.cn/)- 行业智能、边缘计算、专有云、AI硬件、5G!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-08-05 09:37:45 所属栏目:PHP教程 来源:互联网
导读:php中有一个系统自带的计算文件大小的函数,就是filesize(),但是这个函数是以字节为单位的,在一些情况下,我们需要很直观的了解一个文件大小,就不仅仅需要字节B这个单位了,还需要KB,MB,GB,甚至更大TB,PB,所以我们需要自己写一些函数来格式化filesiz
  php中有一个系统自带的计算文件大小的函数,就是filesize(),但是这个函数是以字节为单位的,在一些情况下,我们需要很直观的了解一个文件大小,就不仅仅需要字节B这个单位了,还需要KB,MB,GB,甚至更大TB,PB,所以我们需要自己写一些函数来格式化filesize()的输出结果。
 
  比如碰到一个很大的文件有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;
  } //phpfensi.com
  //辅助函数 round_up(),该函数用来取舍小数点位数的,四舍五入。
  function round_dp($num , $dp)
  {
    $sh = pow(10 , $dp);
    return (round($num*$sh)/$sh);
  }
  这样我们就能很好额统计任何一个文件的大小了,首先通过系统自带的filesize()函数获得文件的字节数,再用上面的这些函数换算成适当的单位就可以了。

(编辑:济宁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读