Last update at Monday, 29-Nov-2004 11:37:51 JST

SSIの裏ワザ(その1)

外国のホスティングサーバで "LAST_MODIFIED" をJSTで表示させるには?


SSIで <!--#echo var="LAST_MODIFIED"-->とすると、そのHTML文書の最終更新日時を表示させることができますが、場合によっては、海外の時刻が表示されてしまうことがあります。

これは、そのサーバが日本標準時(JST: Japan Standart Time)を使用する設定になっていないために起こる現象なのですが、外国のホスティングサーバを利用している場合はもちろん、日本国内に設置されているサーバでも、そのサーバ管理者のポリシーにより、UTC(協定世界時, Universal Time Coordinateds)等、JST以外のタイムゾーンで運用されている場合もあります。

環境変数"LAST_MODIFIED"は、<!--#config timefmt="書式"-->とすることで、最終更新日時の書式を変更させることができます。ここでは書式に関する詳しい説明は省きますが、タイムゾーンを意味する文字列 "%Z" は用意されていますが、これはあくまでもサーバのローカルタイムのタイムゾーンの表示の有無しか制御できません。

実は、私が現在のこのサーバに移る前のサイト(3316.netというところでした……)も外国のサーバを使用したホスティングサービスを利用していました(サーバはアメリカのカルフォルニア州にありました)。ですから、普通に "LAST_MODIFIED" を表示させようとすると、PST(太平洋標準時間, Pacific Standard Time)で表示されてしまってました。

ですが、どうしても最終更新日付をHTML文書の右上に自動的に表示させたいと考えていた私は、とあるワザを思いつきました。「ワザ」と言っても、そんなに難しい話ではありません。SSIを使うことは使うのですが、

環境変数 "LAST_MODIFIED" を表示させるのではなく、
特定のPerlのプログラム(last_modified.pl)を実行させる

ということでした。

以下がそのPerlプログラムです。

#! /usr/bin/perl

#
# last_modified.pl
#
# Programmed 03/05/2001 by Hiroyuki Sasaki

$ENV{'TZ'} = "JST-9";
($mtime) = (stat($ENV{'DOCUMENT_NAME'}))[9];
($sec, $min, $hour, $mday, $mon, $year, $wday) = localtime($mtime);
$mon = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')[$mon];
$year += 1900;
$wday = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')[$wday];
if ($sec < 10) {$sec = "0$sec";}
if ($min < 10) {$min = "0$min";}
if ($hour < 10) {$hour = "0$hour";}
if ($mday < 10) {$mday = "0$mday";}
$date = "$wday, $mday-$mon-$year $hour:$min:$sec JST";
printf("%s\n", $date);

上記プログラムを簡単に説明しますと、以下の通りです。

1. 環境変数"TZ"に"JST-9"を代入することで、このPerlプログラム中のタイムゾーンをJSTにする
2. 環境変数"DOCUMENT_NAME"を名前とするファイル(=SSIプログラムを呼び出したファイル自身の名前)の最終更新日時を取得して、変数$mtimeに代入している
3. 変数$mtimeが環境変数"LAST_MODIFED"と同じ書式で表示されるよう、出力書式を設定している

最後に、<!--#echo var="LAST_MODIFIED"-->と<!--#exec cmd="./last_modified.pl"-->による最終更新日時の表示結果を示します。どうです? まったく同じ結果が得られていますよね?

<!--#echo var="LAST_MODIFIED"--> Monday, 29-Nov-2004 11:37:51 JST
<!--#exec cmd="./last_modified.pl"--> Monday, 29-Nov-2004 11:37:51 JST

注:
このページ内容の初出時は、上記は異なる表示結果が得られていましたが、ドメイン&サーバ移転に伴って、まったく同じ出力結果が得られるようになってしまったため、若干文章に修正を加えました。


サブメニューへ


トップページへ


Copyright © 2001-2004 by Hiroyuki Sasaki