SSIとはServer Side Includeの略です。HTML文書中に以下のようなコメントを挿入することにより、サーバー側がコメントの場所に実行コマンドの結果などを置き換えてくれたりする機能です。
<!--#exec cmd="/bin/ls"-->
SSIに関する詳細仕様は以下のURLを参照してください。
http://hoohoo.ncsa.uiuc.edu/docs/tutorials/includes.html
SSIを使用することにより、たとえば次のようなことができます。
SSIを使用するには、WWWサーバーがSSIをサポートしており、SSIを許可する設定が行われている必要があります。一般のプロバイダでは、セキュリティのために使用を禁止しているところも多いようです。
サポートしていても、拡張子を .shtml にしなければならない、SSIを置けるフォルダが決まっている、自分で .htaccess の設定を行わなければならないなどいろいろあります。詳細はプロバイダにお問い合わせください。
サーバーが Apache の場合は、httpd.conf か .htaccess に以下の記述が追加されている必要があります。( httpd.conf を変更した場合は Apache を再起動してください。)
AddType text/x-server-parsed-html .shtml Options Includes
また、.htaccess で AddType や Options の指定を可能にするには、httpd.conf で以下の設定を行ってください。「許可対象」には、FileInfo(AddType などの指定を可能にする)、Options(Optionsの指定を可能にする)、All(すべての指定を可能にする)などを指定します。
AllowOverride 許可対象
.shtml のファイルだけでなく、拡張子が .html のファイルでも SSI を使用したいときは、AddType の行を次のようにしてください。ただし、.html のファイルに対しても、サーバーで SSI 処理を行うので、サーバーに負荷がかかります。
AddType text/x-server-parsed-html .shtml .html
ファイルの最終更新時刻を表示します。
このファイルは <!--#config timefmt="%Y/%m/%d %X"--> <!--#echo var="LAST_MODIFIED"--> に更新されました。
ダウンロードファイルの最終更新日とサイズを表示します。
ダウンロードは <A HREF="xxx.zip">xxx.zip</A> (<!--#config timefmt="%Y/%m/%d"--> <!--#flastmod file="xxx.zip"-->更新, <!--#config sizefmt="abbrev"--> <!--#fsize file="xxx.zip"-->) を読込んでください。
ヘッダ/フッタを指定します。
<HTML> <HEAD> <TITLE>Sample Page</TITLE> </HEAD> <BODY> <!--#include file="header.html"--> 本文 <!--#include file="footer.html"--> </BODY> </HTML>
指定したファイルの中身を読込んで表示します。file="〜" の 〜 にはファイル名を指定します。../ や絶対パス名は使用できない場合があります。virtual="〜" の 〜 には指定するファイルの仮想パス名(「http://サーバー名/パス名」の「/パス名」の部分)を指定します。
<!--#include file="header.html"-->
:
<!--#include file="footer.html"-->
指定したファイルのサイズを表示します。表示のフォーマットは <!--#config sizefmt="..."--> で指定したものに従います。file="〜" と virtual="〜" の説明は #include と同様です。
<!--#config sizefmt="abbrev"--> <A HREF="xxx.zip">ダウンロード</A> (サイズ:<!--#fsize file="xxx.zip"-->)
#fsizeコマンドなどで表示されるファイルサイズのフォーマットを指定します。〜 に bytes を指定するとバイト単位で、abbrev を指定すると Bytes, KBytes, MBytes などの適切な単位で表示されるようになります。
指定したファイルの最終更新時刻を表示します。表示のフォーマットは <!--#config timefmt="..."--> で指定したものに従います。file="〜" と virtual="〜" の説明は #include と同様です。
最終更新日:<!--#flastmod file="this.html"-->
#echoコマンドなどで時刻を表示する際のフォーマットを指定します。〜 には %Y/%m/%d %H:%M:%s などの文字列を指定します。 %Y や %m は次のような意味を持ちます。
| 置換文字 | 表示例 | 意味 |
|---|---|---|
| %c | 10/30/97 11:22:33 | 月/日/年 時:分:秒 |
| %x | 10/30/97 | 月/日/年 |
| %X | 11:22:33 | 時:分:秒 |
| %y | 97 | 年(2桁) |
| %Y | 1997 | 年(4桁) |
| %b | Oct | 月(3文字) |
| %B | October | 月(フルスペル) |
| %m | 08 | 月(2桁) |
| %a | Sat | 曜日(3文字) |
| %A | Saturday | 曜日(フルスペル) |
| %d | 30 | 日(2桁) |
| %j | 223 | 1月1日からの日数 |
| %w | 6 | 日曜日からの日数 |
| %p | PM | AMもしくはPM |
| %H | 23 | 時(24時間制) |
| %I | 11 | 時(12時間制) |
| %M | 44 | 分 |
| %s | 56 | 秒 |
| %Z | JST | タイムゾーン |
指定した環境変数の値を表示します。〜 には LAST_MODIFIED などの環境変数名を指定します。環境変数名には次のようようなものがあります。
| 環境変数 | 意味 |
|---|---|
| DOCUMENT_NAME | この文書のファイル名(wwwssi.htm) |
| DOCUMENT_URI | 文書の仮想パス名(/~s-hasei/wwwssi.htm) |
| QUERY_STRING_UNESCAPED | WWWクライアントから検索用に送信された文字列。いくつかの記号文字(UNIXのシェルのメタ文字)はパックスラッシュ( \ )でエスケープされているので注意。 |
| DATE_LOCAL | 現在の時刻(ローカル時刻) |
| DATE_GMT | 現在の時刻(グリニッジ標準時) |
| LAST_MODIFIED | この文書の最終更新時刻 |
サーバーによっては、「CGIスクリプトが参照可能な環境変数」も表示できます。時間の表示は <!--#config timefmt="..."--> で指定したフォーマットに従います。
文書処理中にエラーが発生した場合のエラーメッセージを指定します。これはWWWサーバーのエラーログにも記録されます。
〜 で指定したコマンドやCGIを実行し、その結果を表示します。
<!--#exec cmd="/bin/ls"--> <!--#exec cgi="./cgi-bin/count.cgi"-->
cgi="..." で呼び出す際は、CGI側で Content-type: text/html などのヘッダを出力してやる必要があります。
引数(arg1, arg2, ...)を指定する際は、cmd="/bin/xxx arg1 arg2" などのようにスペースで区切って指定します。(perlで引数を受け取るには @ARGV を参照します。)
サーバーの種類やバージョンによっては、コマンド名に絶対パスを指定できない、パス名で上位のディレクトリ(..)を参照できない、コマンドの引数を渡せない、コマンド実行時のカレントディレクトリが異なる・・・などの違いがあるようですので、注意してください。ちなみに、私が使用している Apache/1.3.4 では、以下の状況でした。
○ <!--#exec cgi="xx.cgi"--> × <!--#exec cgi="xx.cgi arg1 arg2"--> × <!--#exec cgi="xx.cgi?arg1+arg2"--> × <!--#exec cmd="xxx.pl"--> ○ <!--#exec cmd="/bin/xxx arg1 arg2"--> ○ <!--#exec cmd="./xxx.pl arg1 arg2"-->