![]()
サーバサイドインクルード
サーバサイドインクルードはNCSA WWWサーバが最初に開発したもので、HTMLファイルへ環境変数の値、スクリプトの実行結果を含ませてから読者へ送信するという機能です。たとえばアクセスした時の時刻を表示するとか、ログイン中のユーザを表示させるとかいう場合に用いられます。サーバサイドインクルードの一般形式は、
と、HTMLのコメント機能を拡張したものです。そして、以下のようなコマンドがあり、それによってタグは決まります。<!--#コマンド タグ1="値1" タグ2="値2" -->
![]()
config
configコマンドのタグは次のとおりです。
errmsg: エラーがあった場合、クライアントへメッセージを送り返し、それをサーバのエラーログに書き込みます。 timefmt: 日付を送る場合に新しいフォーマットを与えるもので、これはUnixのstrftime関数と互換性があります。 sizefmt: ファイルのサイズを表示する時、bytes、kilobytes、megabytesのどれかでその単位を指定します。 include
別の文書(ファイル)を挿入するのに使います。document_rootパスを使用した記述例がこれです。
virtual: WWWで使用されているdocument_rootパスを使用します。 file: 現ディレクトリとの関係でパス名を指定します。このパス名の中へ../や、絶対パス名は使用できません。 <!--#include virtual="/~yokochin/profile.html"-->
![]()
echo
echoはHTTPの環境変数を出力する際に使い、たとえば時刻と最新変更日時が表示したければ以下のように記述します。The current date is <!--#echo var="date_local"--> Last modified: <!--#echo var="last_modified"-->
![]()
fsize
fsizeは指定したファイルのファイルサイズを出力します。includeコマンドと同じタグが有効で、フォーマットはconfigコマンドのsizefmtで決められたものです。This file is <!--#fsize file="yokochin.html"--> bytes.
![]()
flastmod
flastmodは指定されたファイルの更新日時を出力します。
exec
execはシェルコマンドまたはCGIスクリプトを実行し、次のタグが使用できます。
cmd: /bin/shを使って実行されます。 cgi: CGIスクリプトを実行します。 また、次の環境変数が利用できます。<!--#exec cmd="/usr/bin/who"-->
![]()
環境変数 意味 例 document_name 現ファイル ssi.html document_uri ファイルの仮想パス /technotes/WWW/CGI/ssi.html querry_string_unescaped デコードできない文字列 (none) data_local ローカルタイムゾーンの日時 Monday, 03-Jun-96 06:45:35 JST data_gmt GMTの日時 Sunday, 02-Jun-96 21:45:35 GMT last_modified 最後にファイルを変更した日時 Sunday, 02-Jun-96 11:45:56 JST
簡単な例として、次の例を見てみましょう。test.txtには次のファイルを書いておきます。Access Date: <strong><!--#exec command="date"--></strong><p> <!--#include file="test.txt"-->
こうすることで、アクセス時の日時とtest.txt が自動的に読み込まれます。<h2>Test</h2> This is a test.
![]()
また、NCSA httpdでは.shtmlという拡張子がついたファイルは自動的にサーバサイドインクルード(SSI)として扱われます。たとえば、以下のようなtraceroute.shtmlというファイルを作成してみましょう。
そして、このファイルへのアンカーを作成しておくと、そのアンカーをクリックすればWWWサーバからクライアントに向かってtracerouteが実行され、クライアント側ではその経路が辿れます。<title>Traceroute</title> <h2>How do I get from here to there?</h2> <pre> <!--#exec cmd="/usr/sbin/traceroute $remote_addr"--> </pre>
また、ページへのアクセス件数をカウントするスクリプトもサーバサイドインクルード(SSI)機能を使えば簡単です。<a href="traceroute.shtml">ここからそこまでの経路?</a>
HTMLページへは次のように記述します。#!/usr/bin/perl open (count,"./countfile"); # カウンターファイルを開きます。 $counter = <count>; # カウンターファイルの値を読み込みます。 close (count); open (count, "> ./countfile"); # 書き込みモードで開きます。 print count +($counter+1); # 1を足してカウンターファイルへ書き込みます。 close (count); print $counter; # ページに出力します。
SSI機能をサポートしないCERNサーバの場合も、George BurgyanとGabe Schafferが開発したssisと呼ばれるツールを使用すれば疑似的に可能です。アクセス回数 <!--#exec cgi="count.cgi"--> 回
![]()