【PHP】 filesizeで取得したバイト数を人が読みやすい形式に変換する 【human readable】

取得したファイルサイズをMB(メガバイト)やKB(キロバイト)へ変換するやり方は見つかりますが
コマンド -h のようにhuman readable形式で一括変換できる関数が欲しいと思ったので備忘録です。

human readable とは

可読性を高めるために主にバイト数などを人が見やすい形式に変換するオプションです。様々なコマンドに実装されています。例えばメモリ量を確認する free では -h をつけることで以下のようにSI接頭辞が付き表示が変わります。

ファイルサイズ取得

filesize 関数一発でファイルサイズ(バイト)を取得できます。phpはシンプルでいいですね。

$filesize = filesize('a.txt');
print $filesize."B";                       // 77B

バイト数に応じて見やすい形式へ変換する関数

色々と解説入れるよりも見たほうが早いので関数です。桁数に応じてどの接頭辞にするかを判定しています。第1引数にバイト数を入れてください。第2引数は小数点以下の表示桁数を指定でき、指定がない場合は2桁まで表示されます。

//ファイルサイズを人の目に見やすい単位へ
function human_filesize($bytes, $decimals = 2) {
    $factor = floor((strlen($bytes) - 1) / 3);
    if ($factor > 0) $sz = 'KMGT';
    return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor - 1] . 'B';
}

print human_filesize(12, 0);               // 12B
print human_filesize(1234567890, 4);       // 1.1498GB
print human_filesize(123456789, 1);        // 117.7MB
print human_filesize(12345678901234, 5);   // 11.22833TB
print human_filesize(1234567, 3);          // 1.177MB
print human_filesize(123456);              // 120.56KB

上記の関数では K(キロ) M(メガ) G(ギガ) T(テラ)の4つまで表示になりますが、少し変えれば減らしたり増やしたりは可能なのでお好みでカスタマイズしてください。

コメント