PHPで使えるファイルサイズフォーマッター「byte-units」



PHPで ファイルサイズのフォーマットをしてくれるライブラリ「byte-units」の紹介です。

 PHPでファイルのサイズを表示させる時には " filesize " 関数を使いますが、' byte ' 形式で表示される為 ファイルサイズが大きくなると桁数が多くなり 見づらくなります。

 ファイルサイズを取得して ' KB, MB ' などのフォーマットに合わせる関数を作ることは珍しくありませんが、手軽にファイルサイズのフォーマットが出来るPHPライブラリが「byte-units」です。


byte-units で出来ること 

- ファイルサイズを KB, MB, GB などの見やすいフォーマットに変換してくれます

* filesize 関数と byte-units を使った時のファイルサイズ表示の差 


byte-units のインストール

 byte-units は プロジェクトルート上から ' composer ' コマンドを使って導入しています。また、執筆時点で PHPのバージョン  ' 5.4 - 7.2 ' が 動作確認されています。

GitHub : byte-units/.travis.yml

# コマンドライン上から composerコマンドを使って導入
composer require gabrielelana/byte-units


byte-units の使い方

 byte-units の使い方は簡単で、ByteUnits クラスを呼び出し後、 ' bytes ' メソッド内に元となるバイトの数値、' format ' メソッドで 文字列型に変換して使います。

// static 関数なので クラスをインスタンス化する必要はありません
ByteUnits\Metric::bytes(1000)->format(); // 1KB

// 実際に使用する時は 'filesize' 関数と合わせて使うことが多いと思います
ByteUnits\bytes(filesize('myFile.jpg'))->format();


' ByteUnits\Binary ' クラスからメソッドを呼び出すと、1KBを 1024 バイトとして計算されます。

ByteUnits\Binary::bytes(1024)->format(); // 1KB


' bytes ' メソッドはその名の通り バイト から解析されますが、 キロバイト、メガバイトからも解析可能です。   

ByteUnits\Metric::bytes(1000)->format();  // outputs 1.00kB
ByteUnits\Metric::kilobytes(1)->format();  // outputs 1.00kB
ByteUnits\Metric::megabytes(1)->format();  // outputs 1.00MB


' format ' メソッド内で KB, MB, GBなどの アウトプットする特定のフォーマットを指定することも出来ます。

// B, KB, MB, GB, PB, TB
ByteUnits\bytes(139322000)->format('GB'); // outputs 0.14GB


' format ' メソッド内に数値をいれると、アウトプットする桁数することができます。

// 4桁に指定
ByteUnits\bytes(1322123)->format(4); // 1.3221MB
// フォーマットと桁数を指定
ByteUnits\bytes(1322123)->format('GB/4'); // 0.0013GB


また、サイズを比較するメソッドも用意されています。

// サイズが 1KB以上の場合は 1 (true) を返す
ByteUnits\Metric::kilobytes(1)->isLessThan(ByteUnits\Binary::kilobytes(1)); // it's true
// サイズが 1KB の時は 1 (true) を返す
ByteUnits\Metric::kilobytes(1)->isEqualTo(ByteUnits\Binary::bytes(1000)); // it's true
// サイズが 1.3KB 以上の場合は 1 (true) を返す
ByteUnits\Metric::kilobytes(1.3)->isGreaterThan(ByteUnits\Binary::kilobytes(1)); // it's true


byte-units を実際に使う場合は class や trait にまとめて使うことが多いと思われます。

// byte-unitsを trait に まとめた例
trait ByteUnitsTrait
{
    public function format(string $file) : string
    {
        return ByteUnits\Metric::bytes(filesize($file))
                ->format();
    }

    public function isLessthan(string $file, string $size) : int
    {
        return ByteUnits\Metric::bytes(filesize($file))
                ->isLessThan($size);
    }

    /// .....
}


Summary

 CMSや管理システム内のファイルを管理,サイズを表示する時、アップロード時に指定したサイズ以下に収まっているかチェックしたい時に使うなど、ファイルが絡んでくるシステムを開発している時に役に立ちそうなライブラリです。

GitHub : gabrielelana/byte-units

 

この記事のカテゴリ
プログラミング

この記事に付けられているタグ