ファイルサイズを表示

CGIテクニック集トップへ





概要

ファイルリスト3アップダウン2等のようにファイルサイズをブラウザ上に表示します。

必用な処理

  1. ファイルの属性を取得する
  2. ファイルサイズ情報を見やすいように修正する
  3. それを表示する

サンプルコード

 my $size = (stat("$file"))[7];
 
 my $size2;
 if ($size > 1048576){
     $size2 = sprintf("%.1fMB",$size/1048576);
 } elsif ($size > 1024){
     $size2 = sprintf("%.1fkB",$size/1024);
 } else {
     $size2 = sprintf("%dB",$size);
 }
 
 print "$fileのサイズ:$size2";

コードの解説

 my $size = (stat("$file"))[7];

$fileはサイズを取得したいファイル。stat関数によりそのファイルの属性を配列にて取得することができます。8番目の要素(要素番号7)がサイズ情報なのでそれだけを$sizeに格納します。

statの全ての返り値を受け取る場合には、

 my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,
     $mtime,$ctime,$blksize,$blocks)=stat("$file");

のように記述することができます。

 my $size = -s "$file";

のようにファイルテスト演算子、-sでもファイルのバイト数を取得することができます。

 my $size2;
 if ($size > 1048576){
     $size2 = sprintf("%.1fMB",$size/1048576);
 } elsif ($size > 1024){
     $size2 = sprintf("%.1fkB",$size/1024);
 } else {
     $size2 = sprintf("%dB",$size);
 }

この部分は必ずしも必要ではありませんが数値を丸めて単位を付加することで表示する際に見やすくなります。1048576は2^20でメガバイト(MB)に相当, 1024は2^10でキロバイト(kB)に相当します。厳密に言うとこのコードにあるように単純にそれらの数値で割ると正確なMBやkBにはなりません。しかしながら正確に数値を出すことはスクリプトの機能上重要ではないので近似的にこのような処理にして単純化させています。

 print "$fileのサイズ:$size2";

単位付きのファイルサイズを表示します。

関連するCGIテクニック

ファイルの更新時間を表示