SSI

1.SSIってどんなもの?

 SSIとはサーバー・サイド・インクルード(Server Side Include)の略です。 NCSAが最初に開発した機能らしいです。WWWサーバ上のHTMLファイルが、HTTPクライアントに送信される前に、HTMLファイル中に記述された形式にしたがって、環境変数の値や、スクリプト等の実行結果や、他のファイルの内容を含ませ(Includeさせ)てから送信する、という機能です。


2.CGIとの違い

 CGIは、HTMLなり、イメージデータなりをContent-typeヘッダに続けて吐き出します。HTML中にイメージデータ等がCGIの出力結果として貼りつけてあると、クライアントにHTMLファイルがダウンロードされてから、クライアントがそのCGIに要求をだします。結果として出力されたデータをクライアントが処理するわけです。
 が、SSIの出力結果は、サーバーによって呼び出しもとのHTMLファイルに取り込まれます。クライアントから見ると、ただのHTMLとしてしか見えません。


3.SSIの形式

 形式は下の通りです。コメントエスケープで記述します。
<!--#コマンド タグ1="値1" タグ2="値2" -->
 "-"と"#"の間にスペースがあったりすると、コメントと認識されてしまいます。

 下の表にコマンド/タグの一覧を示します。

コマンドコマンド説明
タグ説明タグ名指定内容
configSSIの環境を設定する。
タグ説明errormsgエラー発生時にクライアントにエラーを返す文字列を指定する。
timefmt日付時刻表示の形式を指定する。UNIXのstrftime()と互換性がある。
sizefmtサイズ表示の形式を指定する。
include他のドキュメントファイルの内容を取り込む。
タグ説明virtual仮想パス(サーバのDOCUMENT_ROOTからのパス)でファイルを指定する。
fileカレントディレクトリからのパスでファイルを指定する。"./"や"../"などは使用不可。
echo環境変数の内容を取り込む。
タグ説明var表示する環境変数名を指定する。
flastmodファイルの最終更新日時を表示する。
タグ説明virtual仮想パス(サーバのDOCUMENT_ROOTからのパス)でファイルを指定する。
fileカレントディレクトリからのパスでファイルを指定する。"./"や"../"などは使用不可。
fsizeファイルのサイズを表示する。
タグ説明virtual仮想パス(サーバのDOCUMENT_ROOTからのパス)でファイルを指定する。
fileカレントディレクトリからのパスでファイルを指定する。"./"や"../"などは使用不可。
execシェルコマンドまたはCGIプログラムを実行し、その出力結果を取り込む。
タグ説明cmd実行するシェルコマンドを指定する。
file実行するCGIプログラムを指定する。


4.SSI環境変数

 SSIでは以下の環境変数が使用可能です。

環境変数意味echoコマンドによる表示例
DOCUMENT_NAME現在のファイル名
DOCUMENT_URI現在のファイルの仮想パス(サーバのDOCUMENT_ROOTからのパス)
QUERY_STRING_UNESCAPEDデコードできない文字列
DATE_LOCAL ローカルタイムゾーンの日時
DATE_GMTGMTの日時
LAST_MODIFIED現在のファイルの最終更新日時


5.HTTP環境変数

 おまけとして、HTTP環境変数も載っけておきます。

環境変数意味echoコマンドによる表示例
SERVER_SOFTWAREWWWサーバのソフトウェア名
SERVER_NAMEWWWサーバのIP/ホスト名
GATEWAY_INTERFACEWWWサーバのCGIバージョン
SERVER_PROTOCOLHTTPプロトコルのバージョン
SERVER_PORTWWWサーバのHTTPポート番号
REQUEST_METHODクライアントの要求メソッド
PATH_INFOCGIに渡すパス情報
PATH_TRANSLATEDPATH_INFOのURL部に一致するシステムフルパス
SCRIPT_NAMECGIスクリプトのパス名(URL形式)
QUERY_STRINGCGIがGETメソッド形式で実行された場合の引数("?"マーク以下全て)
REMOTE_HOSTクライアントホスト名
REMOTE_ADDRクライアントIPアドレス
AUTH_TYPE認証方式プロトコル名
REMOTE_USER認証ユーザ名
REMOTE_IDENTidentの返す値
CONTENT_TYPEデータの形式
CONTENT_LENGTHCGIがPOSTメソッドで実行されるときの標準入力データ長(バイト)
HTTP_ACCEPTHTTP Acceptヘッダで定義された、クライアントが許しているContent-typeのリスト(全て:'*/*')
HTTP_USER_AGENTブラウザの情報
HTTP_REFERER直前に参照していたURL

Copyright (C) katsu. All Rights Reserved.