指定したコマンドやCGIを実行します。
「SSI使用ページの紹介」で「ココの俳句?教室」や「カレンダー de ココ」そして「時間ごとにメッセージを」を紹介しました。これらは #exec を使って、結果をページに表示しています
「ココの俳句?教室」には
<!--#exec cgi="./cgi-bin/haiku3.cgi" -->
と書かれています。この記述で俳句のCGIが呼び出され、CGIを呼び出したHTML文書の中に俳句が表示されるようになっています。
#exec の 属性 cmd と cgi については、使い分けが分からないという意見をよく聞きます。SSI方式のカウンターの設置では、どちらの属性を使用しても正常に動く場合もあります。cmd は、<!--#exec cmd="/bin/ls" -->(Windowsの dirと同じようなもの) のように(UNIXなどの)コマンドを直接渡し結果を得ることなど、外部ガイブコマンドの実行に使用します。Perl のスクリプトを呼び出しても構いません。cgi は cgiスクリプトとして認識させ、実行させます。
cgi と cmd の違いを調べるために、単純なPerlのスクリプトを書いてみました。
#!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "このPerlのファイル名は「print_test.cgi」です。<br>"; print "ファイルは /cocohome/ssi/cgi-bin/ にあります。<br>"; print "SSI の #exec テスト用に用意しました。"; exit;上のスクリプト print_test.cgi をブラウザから直接実行すると、下のように画面に表示されます。
2002年11月からiswebでは「#exec」は使用できなくなってしまいました。「表示できていないよ」とお知らせくださったNobさん、ありがとうございました。以下の説明は「#exec」を実行できる環境の方にしか意味がなくなってしまいました。
それでは「#exec(1)」をご覧ください。#exec(1) には
<!--#exec cgi="./cgi-bin/print_test.cgi" -->
と記述されています。
実行結果は以下です。
次に cmd を使用した「#exec(2)」をご覧ください。
<!--#exec cmd="./cgi-bin/print_test.cgi" -->
違いが分かりますでしょうか。Content-type: text/html の記述が cmd を使用したときは、表示されています。しかし cgi を使用したときには、表示されていません。つまり cmd は Windows で言えば、MSDOSプロンプトから直接 print_test.cgi を実行した結果と同様になっています。ブラウザから実行させた結果と同じになるのが cgi となります。
また cmd と cgi の違いは、サーバの種類やバージョンにより、パスの上位ディレクトリを参照できないなどの違いもあるようです。