質問: SSI初心者の者です。 参考書(CGIプログラミング入門/翔泳社)を見ながらCGIとSSIの勉強をしてるのですが、SSIの『#exec cmd』と『#exec cgi』の違いがよくわかりません。 本には前者はPerlスクリプトで後者はCGIスクリプトの場合に使うって書いてあるのですが、この2つってどう違うのですか? 前後の文脈から察するにCGIスクリプトは『print "Content-Type: text/html"』があって、 Perlスクリプトはこれが無いものと読み取れるのですが そうなのでしょうか? 初心者向けに御回答していただけますよう、よろしくお願いいたします。
回答: SSIは基本的に「コマンドを実行してその結果を返す」ためのものです。 ですから、 #exec cmdの場合だと「これはブラウザに結果を返しますよ」 という前提の下で結果が処理されますので、正常に出力されます。 しかし#exec cgiでは、既に「CGIとしてブラウザに結果を 返します」なので CGIの中でTmaさんのおっしゃるようにヘッダをPRINTしてやらないと 平常に出力されなくなってしまいます。 ですから、ちゃんとしたCGIを呼び出す時はCGI=""で。 CGI以外のコマンドで、代用のために呼び出すならCMD=""で。 実際にSSIを使える環境にあるなら、以下を試してみてください。 サーバー上のディレクトリ一覧が正常に表示されたのは どちらでしょうか? 仕様通りなら、上のものが正常に出力されるはずです。