【PHP】 バイト数とメガバイトの相互変換するプログラム
更新日:2022/08/09
ファイルサイズやデータ容量のバイト数をMBなどの適切な単位に変換、その逆に単位がついたサイズをバイト数に変換するプログラムをPHPで作成します。
ここでは、コードのみ紹介しています。
考え方については、次の記事で紹介しているので読んでみてください。
バイト数から適切な単位(メガバイトなど)への変換
次のコードの関数ByteToUnitは、引数を3つ受け取ります。
- 一つ目
変換するバイト数
- 二つ目
変換後の小数桁数。省略可能。規定値2
- 三つ目
変換後の単位を表す文字列がセットされた配列。省略可能。
規定値[ ' B' , ' K', ' M' , ' G' , ' T', ' P' ]
PHP
const BYTE_ARRAY = [ ' B' , ' K', ' M' , ' G' , ' T', ' P' ];
function ByteToUnit($byte,$digi = 2 ,$unit = null){
$size = floatval($byte);
$count = 0;
$u = ($unit===null) ? BYTE_ARRAY : $unit;
$maxcount = count($u);
while($size >= 1024 && $count < $maxcount){
$size /= 1024;
++$count;
}
return sprintf( "%.{$digi}f" , $size) . $u[$count];
}
使用方法&実行結果
echo ByteToUnit(123456); // 120.56 K
echo ByteToUnit(123456 , 10
,[' Byte', ' KByte', ' MByte', ' GByte', ' TByte', ' PByte']);
// 120.5625000000 KByte
単位(メガバイトなど)からバイト数への変換
次の関数UnitToByteは、引数として数値の後に単位が続く文字列を受け取ります。
受け取る文字列は、次のようなものを想定しています。
想定1: バイトをBYTESで表現。例) 100MBYTES
想定2: バイトをBYTEで表現。例) 100MBYTE
想定3: バイトをBで表現。例) 100MB
PHP
const INIGETBYTE_ARRAY=[ 'K' => 1 , 'M' => 2 , 'G' => 3 , 'T' => 4 ];
const DELETE_STRINGS=[ 'BYTES' , 'BYTE' , 'B' , ;' ' , ',' ];
function UnitToByte($unit){
if( !is_string($unit) ) return false;
$retval = false;
// 数値と単位のみ取得
$v = str_replace(DELETE_STRINGS , '' ,strtoupper(trim($unit)));
if(is_numeric($v)) return intval($v);
$len = strlen($v);
if($len>1){
// 最後の一文字以外を取得
$val = substr( $v , 0 , $len - 1);
if( is_numeric($val) ) {
// 最後の一文字を取得
$key = strtoupper(substr( $v , -1 ));
// INIGETBYTE_ARRAYから一致するキーを取得
if(array_key_exists( $key ,INIGETBYTE_ARRAY))
$retval =floor(floatval($val) * pow(1024 , INIGETBYTE_ARRAY[$key]));
}
}
return $retval;
}
最初に、文字列かどうかを確認しています。
次に、バイトを表す文字を除去します。
次に単位文字を抜き出して、単位に対応する回数分だけ数値部分に1024をかけています。
使用方法&実行結果
echo UnitToByte( '123 M' ); // 128974848
echo UnitToByte( '123.45 MByte' ); // 129446707
更新日:2022/08/09
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。