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

SSI初心者の者です。 参考書(CGIプログラミング入門/翔泳社)を見ながらCGIとSSIの勉強をしてるのですが、SS...

hyde-la さんからの 回答

  • 2000/12/20 19:17
  • 回答No.2
hyde-la

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

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
この回答にこう思った!同じようなことあった!感想や体験を書こう!
この回答にはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
  • ローカルサーバーでの動作確認 CGI

    CGI超初心者です. 翔泳社のPERL/CGI辞典を見ながらCGIに挑戦してます. 今ローカルサーバーでの動作確認すべく奮闘しているのですがCGI/SSIを使用するためのAPACHEの設定で頭を悩ませてます. CGIはうまく表示できたのですがどうしてもSSIが表示されないのです. ファイルは本通りに記述したつもりです. 「test.shtml」 <HTML> <BODY> <!--#exec cmd="test.pl" --> </BODY> </HTML> 「test.pl」 #!C:\perl\bin\perl print"hello!"; CGI/SSIはドキュメントルートで制限なく使用できるよう設定しました. test.shtmlは表示されてるようなんですがそこにtest.plが読み込めてないようです(よく分かりませんが…) どこが悪いのか全く分かりません. ブラウザ上でこのtest.shtmlのソースを確認したら<!--#exec cmd="test.pl" -->の部分が表示されてませんでした. 全くの初心者でどのような情報を開示すればよいのか分からないので必要な情報があれば教えていただけるとありがたいです....

  • ローカルパソコンで、CGI(SSI)及びカウンタの動きを確認したいので... その他([技術者向] コンピューター)

    翔泳社のPerl/CGI辞典を購入し、それを参考にPerlとApacheをインストールし直してみました。 以前から、少しCGIは使っていたため、Perl『ActivePerl-5.6.1.635-MSWin32-x86』とApache『apache_1.3.28-win32-x86-no_src』それにhttp://www.st.rim.or.jp/~nakata/の『AN HTTP Server』バージョン1.42kを入れていました。 それをPerl『ActivePerl-5.8.3.809-MSWin32-x86』にし、Apacheはそのままのバージョンで、『httpd.conf』の設定を行ないました。 Options Indexes FollowSymLinks MultiViews ExecCGI Includes とし、 AddHandler cgi-script .cgi AddType text/html .shtml AddHandler server-parsed .shtml の#もはずしました。 しかし、SSIが動きません。CGIは動くのですが、これは何故なのでしょうか? 画面上にHello!と表示させる簡単なプログラムです。 Apacheを起動させ、実行するのですが、画面上に何も表示されません。 Apacheを終了させ、『AN HTTP Server』で、同じ物を動かせば、ちゃんと動きます。 これらについて詳しい方、ぜひアドバイスをお願い致します。 そして、もう一つ疑問があるのですが、『AN HTTP Server』のほうで、カウンタの動作を確認してみました。 スクリプトは、『http://www2j.biglobe.ne.jp/~apollo/』さんの『お好みカウンタ』を借りて、試してみたのですか、カウンタの数字が『error』表示になったり、00000のまま動かないのです。 また、Apacheのほうでも試してみたところこちらでは、画像(数字)が『×』となってしまいます。 『AN HTTP Server』では動いているようですが、ちゃんとした動作にはなりません。 ローカルパソコンでは、限界があるということなのでしょうか? 長くなってしまい、かつわかりにくい文章だと思いますが、随時補足しますので、上記の2点についてアドバイスをよろしくお願い致します。...

  • CGIの中で出力するテキスト内容をhtml側で表示する方法。 CGI

    htmlからCGIファイルを呼び出すと、そのCGIは動作はしているようですが、 print等でhtml形式で文字出力させている部分は、ブラウザ内に表示されません。 今やって失敗している方法です。どのようにするのが良いか教えて頂ければ幸いです。 1.CGIスクリプト(Perlで記述)を用意... test.cgi ----------------------------------------------------- #!/usr/bin/perl print "Content-type:text/html; charset=shift_jis\n\n"; print <<__EOD; <html lang="ja"> <head> <title>TITLE</title> </head> <div align=center> <a>テスト1</a><br> <a>テスト2</a><br> </div><br> </body></html> __EOD open(OUT,">a.tmp") || die "$!"; print OUT "aaaaa\n"; close(OUT); ----------------------------------------------------- 2.htmlを用意 ... test.html ----------------------------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>HTML TEST</title> </head> <body> <script src="http://xxx/CGI/test.cgi"></script> </body> </html> ----------------------------------------------------- 上記のとき、動作として、 ◆ブラウザからCGIのパス(http://svr1/CGI/test.cgi)に直接アクセスした場合、 「テスト1」「テスト2」の文字が表示され、a.tmpファイルも作成されている。 ◆ブラウザからhtml(http://svr1/test.html)にアクセスした場合、ブラウザ画面は何も表示されない (真っ白となる)が、a.tmpファイルは作成されている。 のようになってしまいます。 後者のようにして、htmlからCGIファイルを呼び出すと、そのCGIは動作はしているようですが、 print等でhtml形式で文字出力させている部分は、ブラウザ内に表示されません。 以上、よろしくお願い致します。...

  • Perlが動作しない? CGI

    色んな所でお世話になってます。 皆様にはいつも親切にお答え下さって、本当に感謝しています。 今回、CGIを使ってやりたいことがあり、翔泳社から出版されている 『10日でおぼえるPERL/CGI 第2版』 という本を買ってきました。 が、インストール場所、apacheの設定、入力など、何も間違っていないのに、動作してくれません。 状況として、WEBページで開くと、txt(もちろん拡張子はcgiに変更してあります)の内容がそのまま出力されます。 本来ならばprintのダブルコーテーション内だけが出力されなければいけない筈(本の写真にはそう写ってる)なんですが、WEBページ(127.0.0.1)を開いても #! c:/perl/bin/perl print "Content-type: text/plain\n\n"; print "Hello Perl !"; と表示されるだけなんです。 apacheにはうまく接続できているので、問題はPERL.EXEの方だと思うのですが… 再インストールしてもムダな努力でした。 本の支持通りやってるつもりなので原因が思いつきません。 どこに原因があるのでしょうか? 可能性はたくさんあるんだと思いますが、可能な限り全て試してみますので、よろしくお願いします。...

  • CGIで出力するテキスト内容をhtml側で表示する方法の2 CGI

    前回、 http://okwave.jp/qa4532069.html で質問させて頂いた者です。 その後、joker_mk2さんに教えていただいた方法を使って、下記のように表示できるようになりました。 (前回、ブラウザの設定を色々変えた後、再起動で動くようになったようです) 他のページも参考にして、html側の書き方を変えてみましたが、この方法でもOKでしょうか。 (動いているから、結果オーライかも知れないのですが) 1.CGIスクリプト(Perlで記述)を用意... test.cgi ----------------------------------------------------- #!/usr/bin/perl my $val = 123; print "Content-type: application/x-javascript\n\n"; print "document.write('<p>変数の値=$val</p>')"; ----------------------------------------------------- 2.htmlを用意 ... test.html ----------------------------------------------------- <html> <head> <title>test</title> <meta http-equiv="Content-Type" content="text/html; charset=x-sjis"> </head> <body> <script language='JavaScript' src="http://xxx/CGI/test.cgi"> </script> </body> </html> ----------------------------------------------------- 上記のとき、動作として、 ◆ブラウザからhtml(http://xxx/test.html)にアクセスした場合、 ブラウザ上に 「変数の値=123」 と表示された。 (元々、やりたかったのは、こういうことでした。ありがとうございました) ◆ブラウザからCGIのパス(http://xxx/CGI/test.cgi)に直接アクセスした場合、ファイルのダウンロード確認ダイアログが出た。 ファイルをダウンロードして中身を見ると、 「document.write('<p>変数の値=123</p>')」 と書かれていた。 以上です...

ページ先頭へ