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で質問しましょう!
似たような質問が見つかりました
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- CGI 古ーくからフリーのtree.cgi掲示板を利用させてもらって来ましたが、最新でなにか復活できないか? 2 2023/04/07 10:43
- Perl Perlのエラーについてご教授ください。初心者です。 CGIを別サーバに移したところ、Perlのバー 5 2023/05/31 10:48
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI CGIが読み書きするデータファイルのパーミッションはさくらのインターネットでは何にするべき? 1 2023/05/02 16:44
- CGI サイト訪問者の情報を取得したい 1 2023/02/21 11:03
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
safariでcgiが表示されず cgi...
-
EXCELファイルに誰がアクセスし...
-
MT/カスタムフィールドでのPDF...
-
《エクセルVBA》「他の人が該当...
-
VBAでサーバーにアクセスするに...
-
ApacheでのCGIについての質問
-
WEBデザイナーの方にお聞きした...
-
FTPにて553エラー
-
CGIでソースがそのままでてしま...
-
ラジオボタンのグループ化
-
燃焼熱
-
ブラウザゲーム作成の考え方。
-
カタカナを英語やフランス語に...
-
掲示板の設置方法
-
URLに~/cgi-bin/~を隠す方法
-
perlやPHPについて、CGI方式と...
-
CGIの起動が遅い
-
MIME::EntityやNet::SMTPを使わ...
-
LinuxでAsp.netを構築できるMono
-
「EJBとServletの違い」「J2SE...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
cgi内から別のcgiを呼び出す。
-
cgi→csvが文字化け
-
KENT WEBのページカウンタのタ...
-
ショッピング・システムに、HTM...
-
SSIの『#exec cmd』と『#exe...
-
<img src=
-
cgiでのフォントのサイズ変更方...
-
safariでcgiが表示されず cgi...
-
CGIで表示されるページ(hoge.c...
-
CGIの掲示板で使うBBcodeなどつ...
-
x.htmlが呼ばれたらx.cgiを実行
-
cgiの自動起動
-
cgiからcgiを呼び出す方法2
-
CGIカウンターの画像が表示され...
-
CGIの中でSSIが出来ないので直...
-
cgiでのフォントのサイズ変更方...
-
アクセスカウンターのつけ方
-
CGIを実行する方法
-
PerlでHTMLを構成して
-
WindowsXpProでC言語でCGI
おすすめ情報