[php] ファイル容量の扱い

こんにちわ。
マニュアルをあまり読まないけど、必要な記事を読むと親切丁寧に書かれていることを知り、何故始めから読んでいなかったのだろうといつも自問する、下駄です。
今回は、とあるシステム構築をしているときに、ファイルダウンロードを行うサービスで、ファイルの容量も同時に表示して欲しいとの要望があったので、その対応したソースを紹介します。
phpでのファイルサイズの取得は、飴を舐めるよりも簡単
1 2 3 4 5 6 |
<?php $path = "sample.pdf"; echo filesize($path); > 1234 |
リファレンスページを見るとわかりやすく書かれています。
参考 : https://www.php.net/manual/ja/function.filesize.php
注意点としては、存在しないファイルパスを入れてしまうとエラーになるので、is_fileで確認するようにした方がいいですね。
単位を付けたい
そして、表示する場合には、バイト表示よりも、KBやMBで表示したいと思うのですが、先程のリファレンスページに、いくつか、単位表示に変換するスニペットが書かれています。
1 2 3 4 5 6 7 |
<?php function human_filesize($bytes, $decimals = 2) { $sz = 'BKMGTP'; $factor = floor((strlen($bytes) - 1) / 3); return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor]; } ?> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
function FileSizeConvert($bytes) { $bytes = floatval($bytes); $arBytes = array( 0 => array( "UNIT" => "TB", "VALUE" => pow(1024, 4) ), 1 => array( "UNIT" => "GB", "VALUE" => pow(1024, 3) ), 2 => array( "UNIT" => "MB", "VALUE" => pow(1024, 2) ), 3 => array( "UNIT" => "KB", "VALUE" => 1024 ), 4 => array( "UNIT" => "B", "VALUE" => 1 ), ); foreach($arBytes as $arItem) { if($bytes >= $arItem["VALUE"]) { $result = $bytes / $arItem["VALUE"]; $result = str_replace(".", "," , strval(round($result, 2)))." ".$arItem["UNIT"]; break; } } return $result; } |
他にも使えそうな便利スニペットがたくさん掲載されています。
気になる方は探してみると面白いかも。
以前書いた記事もよろしくね
それから、以前にjavascriptと併用して使えるphp単位変換コードをブログで書いたので、よかったらこちらも参考にしてみてください。
[Javascript , PHP] ファイルサイズのバイト数をKBやMBに表示変更する簡単コード
掛けてみましょう
「ファイルサイズ」と掛けまして、
「破れやすい服に鳥の糞をされた時」とときます。
そのココロは・・・
落とす時に気をつけます。
お後がよろしいようで・・・