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

CGIテクニック集トップへ





概要

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

必用な処理

  1. ファイルの変更時間属性を取得する
  2. 変更時間属性を時刻情報に変換する
  3. 日付時間情報として表示する

サンプルコード

 my $mtime = (stat("$file"))[9];
 my ($min,$hour,$mday,$mon,$year) = (localtime($mtime))[1 .. 5];
 printf("%s年%s月%s日%02s時%02s分",$year+1900,$mon+1,$mday,$hour,$min)

コードの解説

 my $mtime = (stat("$file"))[9];

$fileは時間を取得したいファイル。stat関数によりそのファイルの属性を配列にて取得することができます。statが返す配列の10番目の要素(0から始まる要素番号9)が更新時間情報なのでそれを$mtimeに格納します。他の返り値は捨てています。時間はepochなので1970年1月1日0時0分0秒からの秒数になります。

他のstatの返り値は、

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

のようになります。 この場合アクセス時間は$atime, inode変更時間は$ctimeに格納されます。$sizeによりファイルサイズも取得できます。

 my ($min,$hour,$mday,$mon,$year) = (localtime($mtime))[1 .. 5];

変更時間をlocaltime関数にて時刻情報に変更します。localtimeは配列を返します。返り値の2番目から6番目(要素番号1から5)がそれぞれ分、時、日、月、年のの情報になります。この例では他の返り値は捨てています。

海外サーバーで日本時間を取得するには海外サーバーでの日本時間の表し方を参照してください。

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

 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($mtime);

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

 printf("%s年%s月%s日%02s時%02s分",$year+1900,$mon+1,$mday,$hour,$min)

時刻情報を好みのフォーマットで出力します。年情報$yearは1900年が0なので+1900します。月情報は1月が0, 12月が11なので+1します。

関連するCGIテクニック

ファイルサイズを表示