電子書籍の厳選無料作品が豊富!

SSI初心者の者です。
参考書(CGIプログラミング入門/翔泳社)を見ながらCGIとSSIの勉強をしてるのですが、SSIの『#exec cmd』と『#exec cgi』の違いがよくわかりません。
本には前者はPerlスクリプトで後者はCGIスクリプトの場合に使うって書いてあるのですが、この2つってどう違うのですか?
前後の文脈から察するにCGIスクリプトは『print "Content-Type: text/html"』があって、
Perlスクリプトはこれが無いものと読み取れるのですが
そうなのでしょうか?
初心者向けに御回答していただけますよう、よろしくお願いいたします。

A 回答 (3件)

補足受けましたhyde-laです


結論から言いますと、無視されるようなことはありません。
飽くまで「結果」をどう扱うかという話ですので。
この場合の結果とは、プログラムの標準出力へ出力されたものという意味です。
#EXEC CMDでは、プログラムの「標準出力」を結果としてブラウザに表示するだけです。

UNIXやDOS等、多くの環境には「標準出力」という考え方があります。
これはPRINT文などで出力される場所で、つまりデフォルトでは画面です。
(標準出力はリダイレクトという操作を用いて、出力先を変えることが出来ます)
    • good
    • 0
この回答へのお礼

再度、御回答いただき誠にありがとうございます。
実はその後、いろいろ試行錯誤を繰り返しまして
結論から言いますと、ファイルを読んだり書き込んだり
するときには絶対パスを指定しなくてはならなかったの
ですが、私は相対パスを指定していたのでうまくいかな
かったということが判明いたしました。
hyde-la様、Tma様にはいろいろとアドバイスをいただき
本当に感謝しております。
ありがとうございました。

お礼日時:2000/12/24 01:53

SSIは基本的に「コマンドを実行してその結果を返す」ためのものです。


ですから、
#exec cmdの場合だと「これはブラウザに結果を返しますよ」
という前提の下で結果が処理されますので、正常に出力されます。

しかし#exec cgiでは、既に「CGIとしてブラウザに結果を
返します」なので
CGIの中でTmaさんのおっしゃるようにヘッダをPRINTしてやらないと
平常に出力されなくなってしまいます。

ですから、ちゃんとしたCGIを呼び出す時はCGI=""で。
CGI以外のコマンドで、代用のために呼び出すならCMD=""で。
実際にSSIを使える環境にあるなら、以下を試してみてください。

<!-- #exec cmd="ls" -->
<!-- #exec cgi="ls" -->

サーバー上のディレクトリ一覧が正常に表示されたのは
どちらでしょうか?
仕様通りなら、上のものが正常に出力されるはずです。
    • good
    • 0
この回答へのお礼

お応えいただきありがとうございました。
Tmaさんの回答と併せてよく拝読しましたら
より理解が深まりました。
ただ、ふと思うのですが、#exec cmdの場合は
『ブラウザに表示させる』ことを前提にしてるからには
print や ls などの表示系のコマンドしか受け付け
ないのでしょうか?
たとえば、ファイル操作系の命令↓
open(IN,">name.txt");
print IN "T.Suzuki";
close(IN);
は無視されてしまうのでしょうか?
私の持ってる本では訪問者カウンターを作るときに
#exec cmdを使って上記の様なファイル操作の命令を
行ってるのでできそうな感じなのですが、実際私が
試してみたらできませんでした。
今のところ原因はわかりませんが、もしかしたら
#exec cmdではファイル操作の命令はできないのだろう
か?と思った次第です。でも、本にはできるって書いて
あるし・・・。若干混乱してきてます。

お礼日時:2000/12/22 01:39

後者の「#exex cgi」は CGI として起動することとですが


前者の「#exrc cmd」は command の cmd だったはずです。
なので exec cmd はそこからシェルスクリプトを起動できるのと
exec cgi はそのスクリプトを起動するだけの違いだったと思います。

ただ、「print "Content-Type: text/html\n\n」は
HTML のコンテントタイプを指定しているもので
前者の command ではシェルスクリプト起動であるため
そのままの結果が表示されるので HTML コンテントタイプが不要で、
後者の CGI ではコンテントタイプを指定する必要があるからだと思います。
通常の CGI を Perl などで使ったことがあるのであれば
わかるかと思いますが、CGI として起動したものを
WWW ブラウザに HTML ファイルと教えるには
"Content-Type: text/html\n\n"という記述が必要だと
わかるかと思います。
    • good
    • 0
この回答へのお礼

お応えいただき、どうもありがとうございます。
UNIXもわからないのでシェルスクリプト
といわれてもイマイチピンと来ないのですが、
cmdの場合はブラウザに結果を表示するために
あり、cgiはブラウザに表示させることは
前提としていないから"Content-Type: text/html\n\n"
が必要なんですね。
ありがとうございました。m(__)m

お礼日時:2000/12/22 01:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!