SSIを使う(その1)


SSIとはServer Side Includeの略である。
httpサーバの役目はHTMLファイルを高速にネットワーク上へ送り出す事だが、SSIやCGIをHTML入るの中から呼び出して実行することもできる。
もちろんこれらが実行できないhttpサーバもあるが、最近では大抵のプロバイダがSSIやCG
の実行を許可している。
これらを使うことによってホームページにエッセンスを与えたり、或いは更新の手間を省くなどの恩恵にあずかれるわけだが、注意しなくてはならないのはこれらの実行はサーバに大きな負荷を与える,事である。
ご自分の所有するサーバなら何を動かそうが勝手だが、プロバイダのサーバで余り激しいことを行うと管理者からクレームが付くのは必至だ。


SSIと言っても、シェルスクリプトからCで書かれたプログラムまで色々ある。
基本的なSSIコマンドは以下の通りだ。
<!--#config errmsg="hogehoge"-->
これはSSI実行中に発生したエラーに対して、"hogehoge"と言う文字列に置き換えることを指示する。
<!--#config timefmt="%x"-->
timefmtは時間表示のフォーマットを決めるためのコマンドだ。
引数は下記のようになっている。
%x 時間を含まない優先フォーマットで現在の地域日付を表示する。
%X 日付を含まない優先フォーマットで現在の地域時間を表示する。
%c 現在の地域日時を優先フォーマットで表示する。
%y 世紀を含まない年を10進数で表示する。
%Y 世紀を含めた年を10進数で表示する。
%b 現在の地域の月を省略形で表示する。
%B 現在の地域の月を省略せずに表示する。
%m 月を10進数で表示する(1〜12)%U 今年に入ってからの週番号を10進数で表示する(日曜起点)%W 今年に入ってからの主番号を10進数で表示する(月曜起点)%a 現在の地域の曜日を省略形で表示する。
%A 現在の地域の曜日を省略せずに表示する。
%d 月単位の日番号を10進数で表示する(1〜31)%j 年単位の日番号を10進数で表示する(001〜366)%W 日曜日を0として曜日を10進数で表示する。
%p "am"/"pm"等の文字列を表示する。
%H ?
横柑?崟?濃?屬鯢充┐垢襦?
&I ?
隠音?崟?濃?屬鯢充┐垢襦?
%M 分を10進数で表示する。
%S 秒を10進数で表示する。
%Z タイムゾーンを表示する。
 <!--#config sizefmt="bytes"-->
ファイルサイズの表示形式を変えるためのコマンド,bytesの他にaddrevがある。
<!--#include file="hogehoge.html"-->
親となるHTMLファイルに"hogehoge.html"ファイルを取り込む。
パス指定には因数としてvirtualを用いる。
<!--#flastmod virtual="hogehoge.html"-->
hogehoge.htmlファイルの最終更新日付をtimefmtに従って表示する。
<!--#exec cmd="hogehoge.sh"-->
hogehoge.shを/bin/sh上で実行する。
<!--#exec cgi="hogehoge.cgi"-->
指定されたcgiプログラムを実行する。
<!--#echo var="foo"-->
変数"foo"の内容を表示する。


環境変数SSIの環境変数には以下ものもがある。
DOCUMENT_NAM
現在処理しているファイル名DOCUMENT_UR
現在処理しているファイル名の仮想パスQUERY_STRING_UNESCAPE
クライアントからの検索クエリーDATE_LOCA
地域時間<!--#echo var="DATE_LOCAL"-->で時間が表示されるが、その前にtimefmtが指定されていた場合はそれに従う。
DATE_GM
標準時間LAST_MODIFIE
現在処理しているファイルの最終更新日付時間

SSIを使用するとブラウザのページキャッシングが無効になるが、これは"If-Modifed-Since"
のGETヘッダに対して常に応答するためである。


SSIは危険な芸術SSIは、それが無知な人に使われれば凶器と化する。
SSIを組み込むことによりセキュリティが甘くなることを覚悟しなければならない。
例えば<!--#exec cmd="hogehoge.sh"-->
を組み込み、hogehoge.shの内容が/bin/cat /etc/passw
であったなら、/etc/passwdファイルの内容をHTMLで出力してしまう。