フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【PHP】ファイルサイズの取得と単位変換する方法

filesize()関数
PHP
ファイルサイズ
単位変換

Webサイトを見ているとダウンロードファイルの横に4MBのようにそのファイルのファイルサイズが書かれていることがよくあります。
PHPを使うことで簡単に指定したファイルのファイルサイズを取得することが出来ます。
この記事ではファイルサイズの取得方法とそのファイルサイズをB、KB、MB、GBの単位に変換する方法をご紹介したいと思います。

PHPでファイルサイズを取得する

PHPを使ってファイルサイズを取得するにはfilesize()関数を使います。

<?php $filesize = filesize( 'ファイル名' ); ?>

filesize()関数の引数にファイル名をパスから指定します。
返り値はファイルサイズをバイト数で返します。

引数に指定したファイル名が存在しない場合は、falseを返し、Warningエラーが表示されてしまうので実際には以下のようにfile_exists()関数を使い、そのファイルが存在するかを調べてからfilesize()関数を使います。

<?php
// ファイルサイズを調べたいファイルパス
$path = "ファイル名";

// ファイルが存在するか調べる
if ( file_exists( $path ) ) {

    // ファイルサイズを取得する
    $filesize = filesize( $path );
    echo $path . "のファイルサイズは" . $filesize . "バイトです";

}
?>

ファイルサイズを変換する

filesize()関数で取得出来るファイルサイズはバイト数です。スマホで撮影した写真でさえ、1MBを軽く超えてしまうので、そのままバイト数で出力するとものすごい桁数の数値になってしまいます。

そのため、実際にはKBやMB、GBに変換して表示することが一般的です。

KBに変換

1KBは1024バイトです。

取得したファイルサイズをKBに変換する場合は以下の計算式でバイト数をKBに変換します。

<?php echo $filesize / 1024 . " KB"; ?>

具体的には、以下のように使います。

<?php

$path_KB = "XXXX";
if ( file_exists( $path_KB ) ) {
    $filesize_KB1 = filesize( $path_KB );
    echo round( $filesize_KB / 1024, 2 ) . " KB";
}

?>

MBに変換

取得したファイルサイズをMBに変換する場合は以下の計算式でバイト数をMBに変換します。

1MBは1024000バイト、1024KBです。

<?php echo $filesize / ( 1024 * 1024 ) . " MB"; ?>

具体的には、以下のように使います。

<?php

$path_MB = "XXXX";
if ( file_exists( $path_MB ) ) {
    $filesize_MB = filesize( $path_MB );
    echo $filesize_MB / ( 1024 * 1024 ); . " MB";
}

?>

GBに変換

取得したファイルサイズをGBに変換する場合は以下の計算式でバイト数をGBに変換します。

1GBは1024000000バイト、1024000KB、1024MBです。

<?php echo $filesize / ( 1024 * 1024 * 1024 ) . " GB"; ?>

具体的には、以下のように使います。

<?php

$path_GB = "XXXX";
if ( file_exists( $path_GB ) ) {
    $filesize_GB = filesize( $path_GB );
    echo $filesize_GB / ( 1024 * 1024 * 1024 ); . " GB";
}

?>

ファイルサイズに応じて適切な単位を設定する

最後にご紹介するのが、ファイルサイズに応じてB、KB、MB、GMを自動で振り分ける方法です。
これまでご紹介した変換式を適切に分岐することで実装することが出来ます。

<?php

function convert_size( $filesize ) {
    if ( $filesize >= 1073741824 ) {
        // 1GB以上
        return $filesize / ( 1024 * 1024 * 1024 ) . " GB";
    } elseif ( $filesize >= 1048576 ) {
        // 1MB以上
        return $filesize / ( 1024 * 1024 ) . " MB";
    } elseif ( $filesize >= 1024 ) {
        // 1KB以上
        return $filesize / 1024. " KB";
    } else {
        // 1KB未満
        return $filesize . " B";
    }
}

$filesize = "XXXX";
echoconvert_size( $filesize );

?>

まとめ

いかがでしたか?
ファイルサイズをバイト数のまま表示するとものすごい桁数になってしまいます。
適宜、KB、MB、GBに変換して、直感的にファイルサイズを認識出来るようにしましょう。