[PHP] ファイルサイズを数値に直す関数

以前、[JavaScript] ファイルサイズを数値に直す関数という記事を書きましたが、今回はそのPHP版です。

大まかな使用は前述の記事と同じです。

6B
102KB
2,500KB
800MB
2GB
1TB

上記のような文字列にある程度対応できるような関数になります。

#ファイルサイズ変換関数

function filesize_format($size) {
  // 変数宣言
  $mul = 1024;
  $suf_array = array();
  $suf = '';
  $num_array = array();
  $num = 0;
  
  // カンマを外す
  $size = str_replace(',', '', $size);
  
  // 単位を判定
  preg_match('/(B|KB|MB|GB|TB)/i', $size, $suf_array);
  isset($suf_array[0]) ? $suf = strtoupper($suf_array[0]) : $suf;
  
  // 数値を取り出す
  preg_match('/^[0-9]+(\.[0-9]+)?/', $size, $num_array);
  isset($num_array[0]) ? $num = intval($num_array[0]) : $num;
  
  // 計算
  switch ($suf) {
      case "B":
      default :
          return $num;
      case "KB":
          return $num * pow($mul, 1);
      case "MB":
          return $num * pow($mul, 2);
      case "GB":
          return $num * pow($mul, 3);
      case "TB":
          return $num * pow($mul, 4);
  }
}

指定文字のカンマを外して、数値と単位に分けて、単位によって計算をして値を返します。

#使い方

$size = '2,048KB';
filesize_format($size);
// => 2097152
twitterfacebookhatenafacebook