-PR-
解決
済み

SSIの『#exec cmd』と『#exec cgi』の違いがよくわかりません

  • 困ってます
  • 質問No.20523
  • 閲覧数307
  • ありがとう数6
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 35% (33/92)

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

質問者が選んだベストアンサー

  • 回答No.3
レベル10

ベストアンサー率 28% (42/146)

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

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

お礼率 35% (33/92)

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

その他の回答 (全2件)

  • 回答No.1
レベル8

ベストアンサー率 48% (13/27)

後者の「#exex cgi」は CGI として起動することとですが 前者の「#exrc cmd」は command の cmd だったはずです。 なので exec cmd はそこからシェルスクリプトを起動できるのと exec cgi はそのスクリプトを起動するだけの違いだったと思います。 ただ、「print "Content-Type: text/html\n\n」は HTML の ...続きを読む
後者の「#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"という記述が必要だと
わかるかと思います。
お礼コメント
redsky

お礼率 35% (33/92)

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


  • 回答No.2
レベル10

ベストアンサー率 28% (42/146)

SSIは基本的に「コマンドを実行してその結果を返す」ためのものです。 ですから、 #exec cmdの場合だと「これはブラウザに結果を返しますよ」 という前提の下で結果が処理されますので、正常に出力されます。 しかし#exec cgiでは、既に「CGIとしてブラウザに結果を 返します」なので CGIの中でTmaさんのおっしゃるようにヘッダをPRINTしてやらないと 平常に出力されなくなっ ...続きを読む
SSIは基本的に「コマンドを実行してその結果を返す」ためのものです。
ですから、
#exec cmdの場合だと「これはブラウザに結果を返しますよ」
という前提の下で結果が処理されますので、正常に出力されます。

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

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

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

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

お礼率 35% (33/92)

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

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ