CGIが使えるがSSIが使えないサーバで、擬似的にSSIコマンドを実行して結果をファイルに埋め込むためのCGIスクリプトです。
このスクリプトはダミーの透明GIFファイルを生成するCGIスクリプトとして動作します(ダミー画像ファイルはCGIに埋め込まれているので別途用意の必要はありません)。対象HTMLファイルを開くと、イメージタグを使ってこのCGIスクリプトが起動され、HTMLファイル中のSSI互換コマンドに従ってHTMLファイルが書き換えられるという動作原理です。従って、リアルタイムなデータ更新が出来ませんし(前にページを開いた時点での実行結果が表示される)、ユーザの個人情報などユーザ毎に固有のメッセージを表示するのにも向きません。しかしながら、SSIアクセスカウンタ等には十分実用になるとは思います。
なお、本物のSSIコマンドはHTMLファイルに<!--#(SSIコマンド)-->の形式で埋め込みますが、SSIを禁止しているサーバでは、この形式でSSIコマンドを書くとサーバエラーになることもあります。また、動作原理上、プログラムはどこからどこまでがSSIコマンドの出力なのか把握する必要があります。従って、HTMLファイル中には、#の代わりに*を使って<!--*(SSI互換コマンド)--><!--END-->の形式で記述してください。
機能 | 本物のSSI | SSIemuの疑似SSIコマンド |
---|---|---|
サイズ表示フォーマットの変更 | <!--#config sizefmt="〜"--> | 未サポート |
時刻表示フォーマットの変更 | <!--#config timefmt="〜"--> | <!--*config timefmt="〜"--> ただし、フォーマット文字列は&j(1月1日からの日数)は未対応 |
エラーメッセージの変更 | <!--#config errmsg="〜"--> | 未サポート |
環境変数を埋め込み | <!--#echo var="〜"--> | <!--*echo var="〜"--><!--END--> |
他ファイルの内容を埋め込み | <!--#include file="〜"--> <!--#include virtual="〜"--> |
未サポート |
ファイルサイズを埋め込み | <!--#fsize file="〜"--> <!--#fsize virtual="〜"--> |
未サポート |
最終更新日時を埋め込み | <!--#flastmod file="〜"--> <!--#flastmod virtual="〜"--> |
未サポート |
SSIスクリプトの実行結果を埋め込み | <!--#exec cmd="〜"--> | <!--*exec cmd="〜"--><!--END--> |
CGIスクリプトの実行結果を埋め込み | <!--#exec cgi="〜"--> | 未サポート |
環境変数名は、CGIで参照できる環境変数は参照可能(なはず)です。
ただし、動作原理上、HTTP_REFERERは疑似SSIコマンドを埋め込んだHTMLファイル自身のファイル名になってしまいます。IPアドレスとか(パスワード制限ページの)ユーザIDも取得可能だとは思いますが、HTMLファイルを書き換えた結果は次の人が見るときにも残ってしまうので、HTMLファイルには埋め込まない方がよいです(せいぜいSSIスクリプトでアクセスログを取る程度がよい)。
echo var="〜"に限り、LAST_MODIFIEDも一応対応しているものの、HTMLファイルを書き換えてしまってタイムスタンプが狂うので無意味です。
例えば、このサーバに置いてあるサンプルではこのようなディレクトリ構成になっています。
/cgi |--ssiemu.htm SSIコマンドを埋め込むHTMLファイル(パーミッション606 or 666) |--ssiemu.cgi SSIemu本体(パーミッション705 or 755) |--/lock ロックファイル用ディレクトリ(パーミッション707 or 777) | |--counter.pl SSIスクリプトの例1(パーミッション705 or 755) |--filetime.pl SSIスクリプトの例2(パーミッション705 or 755)
この場合のHTMLファイルへの記述例は以下の通りとなります。
HTMLファイルへの記述
環境変数表示の例<br> このサーバの名前<!--*echo var="SERVER_NAME"--><!--END--><br> <br> ファイル更新日時表示の例(今のところうまくいきません。ゴメンナサイ)<br> <!--*config timefmt="%y/%m/%d %H:%M"--><!--*echo var="LAST_MODIFIED"--><!--END--><br> <br> SSIスクリプト呼び出しの例<br> アクセスカウンタ:<!--*exec cmd="count.pl"--><!--END--><br> このファイルの最終更新日時:<!--*exec cmd="filetime.pl ssiemu.html"--><!--END--><br> <br> このCGIの呼び出しをHTMLファイルのどこか(</body>タグの直前を推奨)に入れておいてください。<br> html=の後には、ssiemu.cgiから見たHTMLファイル名を記述します。<br> <img src="ssiemu.cgi?html=ssiemu.html">
実行結果(本物のSSIは一切使ってません!!)
環境変数表示の例
このサーバの名前kan-chan.stbbs.net
ファイル更新日時表示の例(今のところうまくいきません。ゴメンナサイ)
14/09/19 05:29
SSIスクリプト呼び出しの例
アクセスカウンタ:
このファイルの最終更新日時:2014/09/19(金) 05:29
このCGIの呼び出しをHTMLファイルのどこか(</body>タグの直前を推奨)に入れておいてください。
html=の後には、ssiemu.cgiから見たHTMLファイル名を記述します。
"ssiemu.txt"のファイル名をあとで"ssiemu.cgi"に変更してからお使いください。