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プログラムです。
|
上記プログラムを簡単に説明しますと、以下の通りです。
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 |
注:
このページ内容の初出時は、上記は異なる表示結果が得られていましたが、ドメイン&サーバ移転に伴って、まったく同じ出力結果が得られるようになってしまったため、若干文章に修正を加えました。