すべてのカテゴリ » インターネット・パソコン » 技術・プログラミング

質問

終了

あまりにも素人質問で申し訳ないですが、WebサーバでCGIを使う概念を教えてください。Webサーバと言っても形は決まっていなくてWebにページを後悔するためのサーバですよね。(PCだったり、四角い機器だったり・・・)
CGIとはそのWebサーバ上でプログラムを動かすための仕組みですよね。
で、そのCGIを記述する言語がパールとかPHPですよね。
概念として画面にワーッとパールやPHPでCGIを作るんでしょうか。
(Webページのソースみたいなイメージ)HTMLみたいな。
でもそのCGIをWebサーバに「のっける」ってなんでしょうか?
書いたCGIを何かCDとかに焼いてWebサーバに読み込ませるの?
メール本文みたいに何かに貼り付けて送るの?
形としての概念がないのでちんぷんかんぷんです。どなたかWebサーバで
CGIを使う時の分かりやすい流れ、形としてのイメージを教えてください。
ホスティングでよく「うちは箱貸しでうわものをお客様で~」みたいに言いますが
サーバ本体だけ貸すのは分かりますがお客様はプログラムをつくって
それをどうやってサーバに組み込むのかさっぱりです。どうか助けてください。

  • 質問者:匿名
  • 質問日時:2009-02-23 14:34:50
  • 0

webサーバとは HTTP プロトコルを使って,ユーザのリクエストに従ってデータを送信してくるサービスをするものです.本来は「HTTPサーバ」と呼ぶのが正しいです.
そもそも web なんてのはインターネットの接続状態が蜘蛛の巣のようになっている…ってことで言われ始めた俗称で…などとありますが,今やwebサーバと呼ばれるほうが一般的とも言える(嘆かわしい)状態です…話を戻します.(;´ω`)

ユーザの入力なんかをが webサーバ側に送信もされてきますが,これもユーザ側のリクエストの種別を決めるためのものと考えてください.
で,まぁ,実際には Linux とか FreeBSD とかの上で Apache とかが使われている…と,ここまでは特に問題無いと思います.


http://sooda.jp/ などと記述した場合,sooda.jp のトップレベルのディレクトリ上の index.htm(l) 等があれば webサーバに読み込まれ,クライアントに送信されます(どのファイルが読み込まれるかなどは設定次第です).

話は少し変わります.unix ライクな階層ディレクトリシステムでは Windows のようなドライブレターは使わないので, '/' はファイルシステム全体の最上位に位置し,「ルートディレクトリ」と呼ばれます.ここはそのマシンの管理者でなければ更新することはできません.
もし,http://sooda.jp/ がルートディレクトリを指すとしたら,web サーバは管理者権限で動作しなければならず,その結果,web サーバ経由からキックされる CGI などの外部プログラムも管理者権限で動作することになり,システムの重要なファイルを書き換えたりするかもしれません.

そこで,http://sooda.jp/ となどと記述した場合は「ファイルシステムのもっと下のほぉのディレクトリに変更」してやり,その配下であれば比較的自由度を与えてもよかろぉ…と誰かが考えたんでしょうね(別に,このアイディアはHTTPサーバに限った話ではないので).

http://sooda.jp/ とした場合は ファイルシステム上では /var/www/htdocs/ とかになったりします(システム毎に変更できるので,違うディレクトリになったりすることもあります).そんで,http://sooda.jp/ とリクエストした場合にアクセスされる /var/www/htdocs/ のことを DocumentRoot …ドキュメントルートと呼びます.
以下,ドキュメントルートを /var/www/htdocs/ と仮定します.
なお,WindowsでHTTPサーバを動かした場合はドキュメントルートが C:\var\htdocs\ などになります.ディレクトリの区切り文字がunixライクなOSと異なりますが,これはHTTPサーバが吸収してくれるので,webブラウザではサーバのOS種別を気にすることなく,http://sooda.jp/qa/105722 みたいな記述ができます.

静的なHTMLファイルで記述する際,ドキュメントルートからの絶対パスまたは相対パスになるので,ファイルシステム上のルートディレクトリは参照すらできません.
で,まぁ,ホスティングサービスなんかだと契約ユーザ毎にドキュメントルートを準備していると思いますんで,その配下に自分たちで書いたファイル群を置く…ことになります.「…うわものをお客様で~」のうわものを置くのは,指示されたココになります(FTPクライアントでアクセスした場合にトップレベルディレクトリがココになっているのかも…知らないけど).
ここで大事なのは「うわもの」は静的なHTMLでも(中にスクリプトが記述してあっても),CGIでも,ユーザ側で作成したものすべてを指します.ここまでよいですかね.

昔はCGIの置き場所といったら http://sooda.jp/cgi-bin/ とかを使うことも多かったのですが,最近はドキュメントルート配下でCGIも動作させるように設定することが多いと思います.…つまり,「動くように設定しておかないと,CGIは動作しない」ことになりますんで,自分で設定する場合はご注意ください.(;´ω`)
# これはCGIの動作概念と関係無いですけどねぇ.


ここで質問文に回答を入れながら書きたいと思います.

>…Webにページを後悔するためのサーバですよね。

う~みゅ…何となく「後悔している」のではないかと推測はできますけど….(;´ω`)


>CGIとはそのWebサーバ上でプログラムを動かすための仕組みですよね。

そうです.通常は CGI プログラムから標準出力に出力すると,それを HTTP サーバが受け取って,クライアントに送出します.

>で、そのCGIを記述する言語がパールとかPHPですよね。

半分だけ正解です.Perlで記述したものはCGIですが,PHPで記述した場合は本来,CGIではありません.
但し,嘆かわしいことに,近年ではPHPで記述した場合もCGIと呼ばれることが多い気がします.
CGIは「HTTPサーバにお手伝いしてもらうのはCGIプログラムが標準出力に出したものをクライアントに流してもらうことだけ」です.
それに対してPHPのようなサーバサイドスクリプトの場合,「スクリプトを記述する言語(のインタプリタ)と,HTTPサーバの共同作業で出力するもの」という感じですかね.

《参考とゆぅか余談:JavaScript について》
これはサーバでは実行されず,クライアント…webブラウザが解釈して実行するものです(HTTPサーバは単に記述された通りに送り出しているだけ).
「webブラウザが解釈して実行する」ので,ブラウザの解釈により動作が異なったりするのが困りものだったりします.
で,嘆かわしいことに JavaScript で記述したものを「Javaで書いた…」と表現するヘタレが存在します.
JavaScriptは元々「LiveScript」という名称でした.「Javaが流行りそう」と考えたのかどうか詳細は不明ですが,途中で名称が「JavaScript」に変更されただけですので,「Javaとは関係無し」が正解です.(;´ω`)


>概念として画面にワーッとパールやPHPでCGIを作るんでしょうか。
>(Webページのソースみたいなイメージ)HTMLみたいな。

これは質問の意味がつかめません.(;´ω`)
Perlで記述した場合,Perlのプログラムから,表示させたい HTML 形式が出力されるような感じです.
PHPでもPerlと同様に記述することもできますが,普通は静的なHTMLで常に変わらない外枠を記述してしまい,その中に,パラメータ等によって変化させたい部分だけを出力するようにPHPスクリプトをチョコチョコと埋め込んでいく感じです.

最近は嘆かわしいことに,PHPもCGIの一種みたいに言われることが多いですが,本来は違います.HTTPサーバが送出するときにPHPスクリプトだったら,その実行をPHPに任せて標準出力への出力結果をクライアントに流し,PHPスクリプトが終わったら,静的なHTMLの出力を続ける…という感じです.

ちょこちょこっとしたのを書くならPHPがラクなんですが,PHPは「非常に読みにくく書けてしまう」ことが多いので(慣れないヒトが書いたのは,アトでメンテするとき地獄を見ます),個人的にはあまり好きぢゃなかったりします.


>でもそのCGIをWebサーバに「のっける」ってなんでしょうか?

既にこれに対する回答は記述しました.ユーザさんが作ったすべてのものをFTP等で指定された場所または適切な場所にアップロード…配置することです.
webブラウザでアップロード可能にしてあるケースもあるかもしれません.
適宜,自分でサブディレクトリを作って分けていかないと,数が増えてくるとワケわかんなくなると思いますよ.


>書いたCGIを何かCDとかに焼いてWebサーバに読み込ませるの?
>メール本文みたいに何かに貼り付けて送るの?

既に書いた通り,どちらも違います.


で,そのアトの泣き言は少しスルーします.(;´ω`)


>プログラムをつくって それをどうやってサーバに組み込むのかさっぱりです。

そもそも,自分でプログラムを作るんなら,自分のウチとか会社のLAN内でサーバを立てて,動作することを確認してから公開するものではないんですかね…まずは「自分でやってみること」です.
Windowsマシン1台しかもってなくても可能ですよ.(;´ω`)
Linux のほぉが簡単なんだけど,unix ライクなOSを使った経験が少ないと難しく感じるかも….

もし,趣味で作られているのなら「がんばってくださいね」ですが,既に職業プログラマであったり,職業プログラマを目指しているのであれば「ガタガタゆぅてないで,さっさと自分でサーバ立てて試せや,ヲラヲラ~」ですね.(;´ω`)

この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

回答ありがとうございます。
実はIT営業をやっておりまして、技術とお客様の橋渡し的な役割です。
ホスティングサービスを提案するのに知識もなく
どこまで突っ込んで勉強したらいいのかも分からなかったもので。
とても詳しい説明をいただきありがとうございました。

並び替え:

普通にホームページを作る時は、自分のスペースにHTMLファイル(index.htmlなど)を置きます。それで、ボタンを押した時に何か処理させるプログラムを実行させたいときにCGIでPerlやPHPというプログラムで書かれたファイルを実行させます。
ファイルの場所は特に決められていなければHTMLファイルと同じところに置いとくこともできます。
で、PerlやPHPのファイルはそれぞれのプログラム言語で書かれたもので、HTMLのように記述されたテキストファイルです。HTMLファイルのなかにこのプログラムで書かれたファイルの置き場所とファイル名を記述することでつなげています。この辺はHTMLのリンク先と同じ感覚ですよ。Perlで作ったファイルは.cgi(.plとしたファイルもありますが)、PHPで作ったファイルは.phpでPHPの場合はファイルの置き場所がある程度決められてることが多いかな。

WindowsパソコンでもApache、ActivePerl、PHP、MySQLなどをインストールすればWebサーバを構築できるので試してみたらどうですか?
最近はWampServerというApache、PHP、MySQL環境をまとめてインストールできるものも公開されてます。

  • 回答者:匿名希望 (質問から2時間後)
  • 0
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

自分でインストールしてみるのが一番理解しやすいですね。
自分は技術者じゃないから・・・って自分で使う事は考えていませんでした。
回答ありがとうございます。

単に「Webサーバ」とだけ言うと機械だったりソフトだったりと、場合によって示すものが違います。
サーバマシン(パソコン)で実行するApacheなどのWebサーバソフトが実際にWebサーバの機能を果たします。

WebサーバソフトはHTMLや画像のファイルなどを、Webブラウザとやりとりします。
Webブラウザは受け取ったデータをレイアウトして表示してくれます。

WebサーバはHTMLや画像をプログラムで生成して、Webブラウザとのやりとりに使うことができます。
このしくみをCGIと呼びます。
また、一般的にこのWebサーバが実行するプログラムを単にCGIと読ばれたりします。

「CGIをWebサーバに乗せる」というと、WebサーバがCGIを実行できるように、サーバ上にプログラムを配置することです。
配置の方法は、FTPでアップロードしたり、USBメモリ経由でコピーしたりなどいろいろな方法があるかと思います。

  • 回答者:ぬる (質問から26分後)
  • 0
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

一番最初に勉強したはずなのに概念をすっかり忘れていたようです。
WebサーバソフトがHTMLデータや画像のやり取りをしてくれて
「ブラウザ」が処理して表示するんですよね。
乗せるという表現も教えていただきありがとうございます。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る