サーバサイドインクルードは、次の一般形式を持ちます。ちょうど、HTMLのコ メントを拡張したものです。
<!--#コマンド タグ1="値1" タグ2="値2" -->コマンドには次のようなものがあり、コマンドによってタグが決まります。
configコマンドは次のタグがあります。
別のファイル(書類)を挿入する際に使われます。
<!--#include virtual="/~taro/profile.html"-->
echo はHTTPの環境変数を出力する際に使われます。以下の ように記述すると、時刻と最新変更日時が表示されます。
The current date is <!--#echo var="DATE_LOCAL"--> Last modified: <!--#echo var="LAST_MODIFIED"-->
fsizeは指定したファイルのファイルサイズを出力します。 includeコマンドと同じタグが有効で、フォーマットは configコマンドのsizefmtで決められたものです。
This file is <!--#fsize file="foo.html"--> bytes.
flastmodは指定されたファイルの更新日時を出力します。
execはシェルコマンドまたはCGIスクリプトを実行します。 次のタグが使用できます。
<!--#exec cmd="/usr/bin/who"-->
環境変数 | 意味 | 例 |
---|---|---|
DOCUMENT_NAME | 現ファイル | |
DOCUMENT_URI | ファイルの仮想パス | |
QUERY_STRING_UNESCAPED | デーコードできない文 字列 | |
DATE_LOCAL | ローカルタイムゾーンの日時 | |
DATE_GMT | GMTの日時 | |
LAST_MODIFIED | 最後にファイルを変更した日時 |
簡単な例として、次の例を見てみましょう。
Access Date: <STRONG><!--#exec command="date"--></STRONG><P> <!--#include file="foo.txt"-->
foo.txtには次のファイルを書いておきます。
<H2>Test</H2> This is a test.こうすることによって、アクセスした時の日時とfoo.txt が自動的に読み込ま れます。
また、NCSA httpd では .shtmlという接尾辞のついたファイルは自動 的にそのファイルがサーバサイドインクルード(SSI)として扱われます。例え ば、以下のようなtraceroute.shtmlというファイルを作成しておき ます。
<TITLE>Traceroute</TITLE> <H2>How do I get from here to there?</H2> <PRE> <!--#exec cmd="/usr/sbin/traceroute $REMOTE_ADDR"--> </PRE>
そして、このファイルへのアンカーを作成しておくと、そのアンカーをクリッ クすると、WWWサーバからクライアントに向かってtracerouteが実行 され、サーバからクライアントまでの辿った経路をクライアント側が知る事が できます。
<A HREF="traceroute.shtml">ここからそこまでの経路?</A>また、ページに対するアクセス回数をカウントするスクリプトは、サーバサイ ドインクルード(SSI)機能を使うと簡単に作成できます (下記のコードはファ イルをロックしないため、同時アクセスが行われると問題が起こり、実用で使 うには難があります)。
#!/usr/bin/perl open (COUNT,"./countfile"); # カウンターファイルを開きます。 $counter = <COUNT>; # カウンターファイルの値を読み込みます。 close (COUNT); open (COUNT, "> ./countfile"); # 書き込みモードで開きます。 print COUNT +($counter+1); # 1足してカウンターファイルに書き込みます。 close (COUNT); print $counter; # ページに出力します。
そして、HTMLページは次のようにします。
アクセス回数 <!--#exec cmd="count.cgi"--> 回デモ
SSI機能をサポートしていないCERN サーバでは、 George Burgyan氏と Gabe Schaffer氏が開発したssis と呼 ばれるツールを使用することによって、疑似的に可能です。