更新日時を入れよう


突撃実験室のホームページには更新日時がずらりと並んでいるが、作成日時や、更新日時は明確にした方がよいだろうというコンセプトに基づいて書いている。しかし、HTMLを作る側としては、いちいち手で日付や時刻を記入していては、面倒臭いのだ。一回きりの記事であれば別に構わないが、毎日更新しているようなページであればやってられない。

そこで、突撃実験室ではファイルの更新日時を求めるプログラムを作成するに至り、SSIでページ内に埋め込んでいる。当初は本サイトだけで使うことを前提に作ったのだが、実際に使ってみると、案外便利あることが判明。そのため、急遽某人気サイトのWebmaster氏にモニタをお願いをした。ところが何を勘違いされたのか、氏はロケテストの域を遥か通り越し、気がつけば氏が管理するページの随所に使いまくっていたのであった。

某人気サイトにも採用していただき、実績もできたところなので公開してみよう。

timestamp.c timestampのCソース(右クリックで保存)

まずはソースを見られたいが、簡単なプログラムなのでたったこれだけだ。言うまでも無いが、Cで書いているので、Cコンパイラが利用可能なサーバーでなければ使えない。また、SSIで日付を埋め込むことを目的としているので、プロバイダのサーバーの場合、SSIの使用が許可されていなければならない。これらの条件を満たさないサーバーにホームページをお持ちの方は、どう頑張っても使うことはできないので素直に諦めて欲しい。それから、普通ならPerlで書くだろ!と言われそうだが、作った奴はPerlが書けないのだ。もっとも、Perlはリソースの使い方が激しいため、サーバー負荷の観点からは、Cで書かれている方が良い。

ただ単に更新日時を埋め込むだけなら、わざわざこんな事をしなくても済む。例えば、以下のようなSSIコマンドを埋め込めば、filename というファイルの更新日時を得ることが出来る。しかし、これだとある程度決まったフォーマットでしか日時を表示することが出来ない。

<!--#flastmod file="filename" -->
結果:Saturday, 27-Jun-1998 18:00:00 JST

このプログラムを使うメリットは、printf() で表示しているため、おおよそどんなフォーマットにでも整形して表示させることが出来ことだ。その気になれば、以下みたいな、漢数字とかロリコン言葉をふんだんに使ったマニアックな表示も可能となるわけだ。(ただし、改造しないと出来ないけど。漢数字なんかはちょっと工夫が必要だが、要望があればやるよ。)

ここはね、六月二十七日・土曜日に更新されたよっ☆

さて、条件が整っている方は、まずはサーバーにTelnetでログインし、コンパイルされたい。当たり前だが、適当なディレクトリに timestamp.c を予め置いておく。なお、WindowsやMacなどで編集されてからFTPで転送される場合は、必ずASCIIモードで転送されることを確認して頂きたい。何故なら、各OS毎に改行のコードが異なり、ありのままに転送するBINARYモードでは不正なテキストファイルに出来上がってしまう。FTPのASCIIモードは、改行コードを修正しながら転送してくれるのだ。

% cc -o timestamp timestamp.c

普通のUNIX系のサーバーであれば、上記のように打ち込むだけでコンパイルが出来るはずだ。FreeBSD 2.2.1-R と SunOS 5.5.1 では、何れも gcc でコンパイルと動作を確認している。ここで cc が無いとか言われると少しややこしい。cc が使えないように設定されている場合も考えるし、パスが通ってないだけかも知れない。前者の場合は諦めるしかないが、後者の場合は探せばどうにかなる。わからなければ、プロバイダのサポートに聞けば何か教えてくれるだろう。

無事にコンパイルが出来たら、取り敢えず実行してみて動作を確認する。

% ./timestamp timestamp.c

こうすると、timestamp.c というファイルの更新日時が表示されるはずだ。それが成功すれば、予め用意されているオプションも試してみられたい。以下のように、様々な形式で日付や時刻を返してくれる。オプションの使い方は、timestamp [-option] filename だ。

オプション結果備考
timestamp filename98/05/31オプション無し(デフォルト)
timestamp -0 filename98/05/31日付のみ
timestamp -1 filename1998/05/31 02:17:42日時1
timestamp -2 filename98/05/31 02:17:42日時2
timestamp -3 filename02:17:42時刻のみ
timestamp -4 filename05/31 02:17短縮日時表示

また、上記の他に WWWCの更新時刻METAタグを生成することも可能だ。-w オプションを指定すると、

<META NAME="WWWC" CONTENT="1998/05/31 02:17">

のように現れる。これを <head> </head> 内に埋め込むと、WWWCで更新時刻が簡単に取得できるようになる。

この辺のテストが済めば、Webページに埋め込んで使おう。SSIでコマンドを実行させるには、

<!--#exec cmd="./timestamp index.html">

このように指定する。ここでは、index.html と timestamp が同じディレクトリにあることが前提だ。別のディレクトリにある場合は、SSIが読み込まれる html ファイルが置いてある場所からの相対的な位置を指定しなければならない。ちょっとややこしいが...

表示フォーマット必要に応じてカスタマイズすると良いだろう。ソースを見れば大体わかると思うが、printf() で表示しているので改造は容易だ。曜日名テーブルを作れば、曜日も表示が可能である。なお、ここでは localtime() を使っており、サーバーの現地時刻が表示される。日本国内のサーバーで日本人向けのサイトで使う場合には良いが、サーバーの設置場所とコンテンツを見る場所が異なる場合には、時差の修正を行わなければならないのでご留意頂きたい。

本ソフトウェアの利用は然る事ながら、配布及び改造なども自由に行って頂いて構わない。ただし、本ソフトウェアは完全に無保証であり、本ソフトウェアの利用等により生じた如何なる事態にも、作者は一切担保しないものとするので、その点だけはご理解頂きたい。「うちで使ってます〜」なんてメールもくれたら嬉しいな。



もどる