SSI初心者の者です。
参考書(CGIプログラミング入門/翔泳社)を見ながらCGIとSSIの勉強をしてるのですが、SSIの『#exec cmd』と『#exec cgi』の違いがよくわかりません。
本には前者はPerlスクリプトで後者はCGIスクリプトの場合に使うって書いてあるのですが、この2つってどう違うのですか?
前後の文脈から察するにCGIスクリプトは『print "Content-Type: text/html"』があって、
Perlスクリプトはこれが無いものと読み取れるのですが
そうなのでしょうか?
初心者向けに御回答していただけますよう、よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
補足受けましたhyde-laです
結論から言いますと、無視されるようなことはありません。
飽くまで「結果」をどう扱うかという話ですので。
この場合の結果とは、プログラムの標準出力へ出力されたものという意味です。
#EXEC CMDでは、プログラムの「標準出力」を結果としてブラウザに表示するだけです。
UNIXやDOS等、多くの環境には「標準出力」という考え方があります。
これはPRINT文などで出力される場所で、つまりデフォルトでは画面です。
(標準出力はリダイレクトという操作を用いて、出力先を変えることが出来ます)
再度、御回答いただき誠にありがとうございます。
実はその後、いろいろ試行錯誤を繰り返しまして
結論から言いますと、ファイルを読んだり書き込んだり
するときには絶対パスを指定しなくてはならなかったの
ですが、私は相対パスを指定していたのでうまくいかな
かったということが判明いたしました。
hyde-la様、Tma様にはいろいろとアドバイスをいただき
本当に感謝しております。
ありがとうございました。
No.2
- 回答日時:
SSIは基本的に「コマンドを実行してその結果を返す」ためのものです。
ですから、
#exec cmdの場合だと「これはブラウザに結果を返しますよ」
という前提の下で結果が処理されますので、正常に出力されます。
しかし#exec cgiでは、既に「CGIとしてブラウザに結果を
返します」なので
CGIの中でTmaさんのおっしゃるようにヘッダをPRINTしてやらないと
平常に出力されなくなってしまいます。
ですから、ちゃんとしたCGIを呼び出す時はCGI=""で。
CGI以外のコマンドで、代用のために呼び出すならCMD=""で。
実際にSSIを使える環境にあるなら、以下を試してみてください。
<!-- #exec cmd="ls" -->
<!-- #exec cgi="ls" -->
サーバー上のディレクトリ一覧が正常に表示されたのは
どちらでしょうか?
仕様通りなら、上のものが正常に出力されるはずです。
お応えいただきありがとうございました。
Tmaさんの回答と併せてよく拝読しましたら
より理解が深まりました。
ただ、ふと思うのですが、#exec cmdの場合は
『ブラウザに表示させる』ことを前提にしてるからには
print や ls などの表示系のコマンドしか受け付け
ないのでしょうか?
たとえば、ファイル操作系の命令↓
open(IN,">name.txt");
print IN "T.Suzuki";
close(IN);
は無視されてしまうのでしょうか?
私の持ってる本では訪問者カウンターを作るときに
#exec cmdを使って上記の様なファイル操作の命令を
行ってるのでできそうな感じなのですが、実際私が
試してみたらできませんでした。
今のところ原因はわかりませんが、もしかしたら
#exec cmdではファイル操作の命令はできないのだろう
か?と思った次第です。でも、本にはできるって書いて
あるし・・・。若干混乱してきてます。
No.1
- 回答日時:
後者の「#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"という記述が必要だと
わかるかと思います。
お応えいただき、どうもありがとうございます。
UNIXもわからないのでシェルスクリプト
といわれてもイマイチピンと来ないのですが、
cmdの場合はブラウザに結果を表示するために
あり、cgiはブラウザに表示させることは
前提としていないから"Content-Type: text/html\n\n"
が必要なんですね。
ありがとうございました。m(__)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
SSI(<!--#exec cmd=./XXXpl")の実行ができなくてこまっています。"
CGI
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGIで表示されるページ(hoge.c...
-
EXCELファイルに誰がアクセスし...
-
.htaccessを2つ以上設置した場合
-
XサーバーでCGIを使うには??
-
CGIでソースがそのままでてしま...
-
ログアウト処理でWebブラウザを...
-
FTPにて553エラー
-
C# ファイル削除のエラーコード
-
CGI掲示板 Rainbow Channel
-
CGI初心者です
-
Webからアクセスし、画面のボタ...
-
MP Form Mail CGI で 500サーバ...
-
カタカナを英語やフランス語に...
-
CGIにCSSを
-
VBAでサーバーにアクセスするに...
-
VBScriptで、ファイルから任意...
-
メールフォーム作成でInternal ...
-
今
-
ブログを作成するためのCGI...
-
CGIの手順について教えていただ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cgi→csvが文字化け
-
safariでcgiが表示されず cgi...
-
cgiからcgiを呼び出す方法2
-
CGIで表示されるページ(hoge.c...
-
1つのhtmlページにたくさんのC...
-
cgi内から別のcgiを呼び出す。
-
SSIでリダイレクトできないでし...
-
KENT WEBのページカウンタのタ...
-
アクセス解析 フレーム SSI ....
-
EXCELファイルに誰がアクセスし...
-
《エクセルVBA》「他の人が該当...
-
CGIでソースがそのままでてしま...
-
ASP(IIS?)のエラーについて
-
FTPにて553エラー
-
ASPから既存のexcelブックを開...
-
VBScriptで、ファイルから任意...
-
ASPからJavaScriptへの受け渡し...
-
VBAでサーバーにアクセスするに...
-
ラジオボタンのグループ化
-
JAVAで別サーバーのファイルの...
おすすめ情報