PaddieのCGIの部屋        Since 2000.04.28

ここではPaddieが作ったCGIスクリプトの紹介やCGI (Webサーバーの設定やPerl) について、わかる範囲で(笑)解説します。
〜Last Modified : 02 May.2000〜


 
CGIとSSI
さて、SSIという言葉がでてきました。
SSIとは"Server Side Include"の略なんですが、ややこしいことはここの主旨から外れますので書きません。

簡単に言えば、SSIというのはCGIの一種で、 普通のCGIとはその呼び出し方法が異なります。
普通のCGIはそのCGIファイルを直接呼び出してサーバー上で動作させ、その出力結果が返ってくるものです。

SSIでは、通常のHTMLファイルの中にSSIコマンドが埋め込まれていて、 そのHTMLファイルが呼び出されるとWebサーバーがそのコマンドの部分を出力結果に勝手に差し替えたものが返ってきます。

先ほどの例で言うと、、、

次郎君が食パンをもっていて、その食パンは見えないところでミミを取りジャムを塗ってから渡すという決まりがあったとします。
(もし、ミミのない食パンがあったら、それはそのままで渡すというルールとします。)

太郎君が「食パンをちょうだい」と言ってきたときに次郎君は勝手にミミを取ってジャムを塗り、それを太郎君に渡します。
そして、太郎君はその食パンには始めからミミがなく、ジャムが塗られていると思いこんでいるのです。

このミミを取ってジャムを塗るという行動がSSIと言えるでしょう。

もちろん、ミミが埋め込まれたコマンド、塗られたジャムが出力結果です。

次にSSIコマンドの形をあげてみましょう。

SSIコマンドはたいてい
<!--#exec cmd="ファイル名" --> とか、
<!--#exec cgi="ファイル名" --> という形をしています。

HTMLのコメントは通常、<!-- コメント -->という形なのですが、 HTMLのコメントとSSCのコマンドはよく似ていますよね?何故でしょうか?

これはSSI動作をしないWebサーバー上にSSIコマンドを含むHTMLファイルがおかれた場合、 出力が当然そのままSSIコマンドを含んだものになるので、ブラウザでエラーを出さないで表示させるためです。

 ※SSIというのは実際にはCGIを動かすだけではないのですが、
  ここではCGIを動かすのが目的ですから、#execだけを対象
  して書いています。SSIではその他にも#echo、#flastmod、
  #fsize、#config、#includeなどがあります。
  #execではシェルコマンドなんかも実行できるんですが、それも
  割愛しちゃいます(^^)

SSIコマンドのほかにも、JavaスクリプトなどもHTMLのコメントタグと同じ形で組み込まれます。

さぁ、先ほどのSSIコマンドを見て下さい。#exec cmd というのと#exec cgi というのがありますね。

これらはそれぞれ「コマンドを実行する」のと「CGIを実行する」という違いがあります。

ちょっと判りにくいかも知れませんがこういうことです。

<!--#exec cmd="ファイル名" --> <!--#exec cgi="ファイル名" -->
100」という文字列を埋め込ませる場合の比較

  「#exec cmd」形式 「#exec cgi」形式
HTTP
ヘッダ
なし Content-type: text/plain<改行>
<改行>            
出力本体 100 100
理由 「コマンド」の実行結果を直接埋め込むのでHTTPヘッダは必要ない 「CGI」の実行結果を埋め込むためHTTPヘッダが必要


おわかりいただけましたでしょうか?
両者の違いは「HTTPヘッダ」があるかないかということです。

普通、「HTTPヘッダ」のある方をCGIスクリプト(拡張子「.cgi」)、
ない方をPerlスクリプト(拡張子「.pl」)と呼ぶことが多いようです。

要は好みに応じて使い分ければいいのです(^^;;;;

また、カウンタとして使う場合は環境変数'DOCUMENT_URI'などをうまく利用すると、 複数ファイルのカウントを一つのスクリプトファイルで実行させることもできます。

CGIって何ですか?
CGIの部屋へ戻る
サーバーの設定
 


Copyright 1999-2000 Paddie
私宛のメールは"paddie@paddie.com"まで。

// TOPページ  // 掲示板  // MEMOちゃ  // CGIの部屋 //