設定メモ:最終更新日表示

投稿者: | 2006年1月30日

忘れんようにメモ。
太郎のトップページにサイト内のコンテンツへのリンクがあるけど、これに最終更新日の表示があったらいいな、ということで調べてみた。表示しているファイルのタイムスタンプを表示するだけならJava Scriptでできるみたいだけど、リンク先のファイルの場合は一般的にはSSI (Server Side Include) を使うらしい。この場合、SSIを含むHTMLファイルの拡張子を.shtmlに変更する。う~ん、これはあんまりやりたくない。この拡張子は.htaccessファイルで変更できるんだけど、例えば拡張子.htmlをSSI解釈するようにしてしまったら全てのHTMLファイルでSSIを解釈しようとすることになって、サーバーに余計な負荷がかかる。これもイヤだ。何とかCGIだけで出来ないものか、と色々探してみたら、ちゃんとあった。Webの世界には奇特な人がたくさんいて、こういう痒いところに手が届くスクリプトを惜しげもなく制限なしで公開してくれている。有難いことだ。いつか自分も、こういう形でコミュニティーに恩返しができたらいいな。

CGIだけで実現しているこの仕組みは、実に上手く考えられている。実は、最終更新日の入ったHTMLファイルはただのHTMLファイルで、日付が普通にテキストで入っている。SSIやJavaScriptの場合は要求を受けた時点で動的に生成したページを返す。CGIの掲示板なんかもそうなのだが、この最終更新日が入ったファイルはリンク先が更新された時点で生成され、要求に対して返すのは静的なファイルというわけだ。原理は、以下のようになる。

まず、生成したいHTMLファイルの元になるテンプレートを作成する。テンプレートといっても、それぞれのリンクの最終更新日の日付の部分を特殊なタブで置き換えただけのものだ。これを、別の名前でアップしておく。本体CGIは、呼び出されると指定されたファイルのステータスを見に行き、タイムスタンプを取得する。その後、テンプレートを開いて特殊タグを探し、適当に整形したタイムスタンプで置換してから別名で保存する。この別名が、生成したいHTMLファイルの名前というわけだ。太郎通信やBBSはそれら自体がCGIだから、更新される時は必ず実行されるスクリプトがある。そこからこの最終更新日表示CGIを呼び出せばよい。この雑記帳についてはそれがないけど、ま、これくらいなら手動でやってもいいだろう。

ちょっと苦労したのは、タイムスタンプを日本標準時にするところくらいか。サーバーがあるのはアメリカなので、普通にlocaltimeを取得すると日本時間から16時間程遅れた時間が表示されてしまう。取得した時刻に16時間を足せば済む話なんだけど、フォーマットも何も分からなかったから試行錯誤でするしかなかった。その結果、秒単位のシリアル値であることが判明したので16×60×60を足すことで解決できた。

もうほとんど完成しているんだけど、実際の運用は管理者のkaoriの許可が下りてからである。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です