Web serverのhttpdがNSCA系のものならば、というよりも現在では WWWの本家のCERN系のhttpdでないならば、CGIとは別な方法で ページの自動微変更が可能です。SSIと呼ばれている特殊命令です。
HTTPdは普通のHTMLファイルは単にbrowserに送信するだけですが、 SSI命令が含まれているSHMTLファイルには送信する前にSSI命令を 解釈してその結果を送信データに付加して送信します。
SSIを利用できるようにするにはあなた自身かserver管理者が 少々の設定を行う必要があります。server管理者なら httpdの設定ファイルのひとつ srm.cnf の中で
の記述を追加すると良いでしょう。server管理者がこのような 設定をしていなく、管理者にこの設定をお願いしても聞いてくれないのなら、 SSIを使うファイルがあるディレクトリに .htaccess という名の ファイルを作り、その中でAddType text/x-server-parsed-html .shtml
と記述します。これはUNIXでの方法で他のOSでの方法は私は知りません。 もちろんserver管理者がSSIを禁止しているのならこうしてもSSIを 使うことはできません。AddType text/x-server-parsed-html .shtml
このような準備のもと、SSI命令を含むファイルはその拡張子を .shtml としてHTTPdにSSI命令の処理を明示します。
SSIの命令について解説します。SSIはCGIが登場するより前に表れた 機構なのでCGI程の自由な利用価値はないですがHTML文章のほんの一部だけを 毎回変更したいけれど、文章全部をCGI化するのはおおげさと思うときに使います。 SSIの命令には幾つかの種類があります。
HTMLファイルの押入したい場所に次のように記述します。
cmd=""の""の部分の文字列がOSのコマンドです。コマンドは絶対path指定でなければ 動かないこともあります。この例ではファイルの一覧を表示するlsコマンドを使って います。コマンドの出力結果は当然HTML的ではないので<PRE>をかけておきます。<PRE><!--#exec cmd="ls -l"--></PRE>
HTMLファイルの押入したい場所に次のように記述します。
cgi=""の""の部分の文字列がcgiのコマンドです。通例、数行の出力をだす 小型のCGIを使います。このCGIにHTMLタグ類を出力させてそれらをbrowserに 解釈させることはもちろん可能です。<!--#exec cgi="randimag.cgi"-->
環境変数DATA_GMTの値が表示されます。 SSI特有の環境変数として以下の5種があります。<!--#echo var="DATE_GMT"-->
DOCUMENT_NAME | HTMLファイルの名前 |
DOCUMENT_URI | HTMLファイルのpath |
QUERY_STRING_UNESCAPED | 復元されたQUERY_STRING |
DATE_LOCAL | 地方時 |
DATE_GMT | 世界時 |
LAST_MODIFIED | ファイル最終更新日時 |
他ファイルをこの位置に押入します。ファイルの指定には2種類ありfileでは HTMLファイルからの相対URL、virtualでは、そのwebサイトからの相対URLです。 例のようにsignatureを付け足すのに便利です。一つのファイルを変更するだけで 全HTMLファイルのsignatureを変更できるわけです。<!--#include file="signature.txt"--> or <!--#include virtual="/~naoki/CIPINTRO/CCGI/signature.txt"-->
それぞれ指定したファイルのディスク容量の数字を押入します。<!--#fsize file="signature.txt"--> or <!--#fsize virtual="/~naoki/CIPINTRO/CCGI/signature.txt"-->
それぞれ指定したファイルの最終更新日時を押入します。<!--#flastmod file="signature.txt"--> or <!--#flastmod virtual="/~naoki/CIPINTRO/CCGI/signature.txt"-->
こうすると、この後に続く日時関連の環境変数の出力や、ファイル更新時刻の 出力のSSIの書式が変更されます。この%Yなどの書式制御文字列にはいろいろある ようですが割愛させてもらいます。<!--#config timefmt="%Y年%m月%d日 %H時%M分%S秒"-->
ファイルサイズを出力するSSIの単位を変更します。bytesでバイト単位のファイル サイズの出力になり、abbrevでキロバイト単位の出力となります。<!--#config sizefmt="bytes"--> or <!--#config sizefmt="abbrev"-->