GIFs on the Fly フォームとCGI目次 ダイナミイクドキュメント

サーバサイドインクルード

サーバサイドインクルードはNCSA WWWサーバが最初に開発したもので、HTMLファイルへ環境変数の値、スクリプトの実行結果を含ませてから読者へ送信するという機能です。たとえばアクセスした時の時刻を表示するとか、ログイン中のユーザを表示させるとかいう場合に用いられます。

サーバサイドインクルードの一般形式は、

	
	
	<!--#コマンド タグ1="値1" タグ2="値2" -->
	
	
と、HTMLのコメント機能を拡張したものです。そして、以下のようなコマンドがあり、それによってタグは決まります。

config

configコマンドのタグは次のとおりです。

include

別の文書(ファイル)を挿入するのに使います。 document_rootパスを使用した記述例がこれです。
	
	
	<!--#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スクリプトを実行し、次のタグが使用できます。
	
	
	<!--#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_gmtGMTの日時Sunday, 02-Jun-96 21:45:35 GMT
last_modified最後にファイルを変更した日時Sunday, 02-Jun-96 11:45:56 JST


簡単な例として、次の例を見てみましょう。

	
	
	Access Date: <strong><!--#exec command="date"--></strong><p>
	<!--#include file="test.txt"-->
	
	
test.txtには次のファイルを書いておきます。
	
	
	<h2>Test</h2>
	
	This is a test.
	
	
こうすることで、アクセス時の日時とtest.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 cgi="count.cgi"--> 回
	
	
SSI機能をサポートしないCERNサーバの場合も、George BurgyanGabe Schafferが開発したssisと呼ばれるツールを使用すれば疑似的に可能です。



Copyright (C) 1996-2003 by Yasukazu Yokoi. All Rights Reserved.