CGI は Common Gateway Interface の略です。名前の通り、あらゆるものの「共通」ゲートウェイ インターフェイスです。名前からすると、とても些細で素朴な感じがします。私はこのことを理解したつもりで、この言葉に出会うたびにそう感じていました。しかし、率直に言って、理解していませんでした。いまだに混乱しています。
私はWeb開発経験を持つPHPプログラマーです。
ユーザー (クライアント) のページ要求 ---> Web サーバー (-> 埋め込み PHP インタープリター) ----> サーバー側 (PHP) スクリプト ---> MySQL サーバー。
ここで、PHP スクリプトが MySQL サーバー、MATLAB サーバー、およびその他のサーバーから結果を取得できるとします。
では、PHP スクリプトは CGI なのでしょうか? それは、Web サーバーと他のすべてのサーバー間のインターフェイスだからです。わかりません。CGI をテクノロジーと呼ぶこともあれば、プログラムや他のサーバーと呼ぶこともあります。
CGI とは何でしょうか?
何が問題なのですか
/cgi-bin/*.cgi
? これはどういうことですか? サーバー上のこのディレクトリが何のためにあるのかわかりませんcgi-bin
。 *.cgi 拡張子が付いている理由もわかりません。なぜ Perl はいつも邪魔になるのでしょうか。CGI と Perl (言語)。私もこの 2 つが何なのかわかりません。ほとんどの場合、この 2 つを「CGI と Perl」の組み合わせで聞きます。この本はもう 1 つの素晴らしい例です。Perl による CGI プログラミング「PHP/JSP/ASP を使用した CGI プログラミング」ではダメですか? そのようなものは見たことがありません。
C での CGI プログラミングは、私をとても混乱させます。「C で」?? マジで?? 何と言っていいかわかりません。混乱しているだけです。「C で」?? これによりすべてが変わります。プログラムはコンパイルして実行する必要があります。これにより、Web プログラミングに対する私の見方が完全に変わります。いつコンパイルするのですか? プログラムはどのように実行されますか (マシン コードであるため、独立したプロセスとして実行する必要があります)。Web サーバーとどのように通信するのですか? IPC ですか? また、ソケット プログラミングを使用してすべてのサーバー (私の例では MATLAB と MySQL) とインターフェイスするのですか? わかりません!!
CGI は廃止され、もう使用されていないと言われています。本当にそうなのでしょうか? 最新のアップデートは何ですか?
かつて、Web サーバー (Apache HTTPD) への HTTP PUT リクエスト アクセスを許可しなければならない状況に遭遇しました。かなり昔のことですが、覚えている限りでは、次のようにしました。
Apache HTTPD の設定ファイルを編集して、Web サーバーにすべての HTTP PUT リクエストを渡すように指示しました
put.php
(この PHP スクリプトを作成する必要がありました)リクエストを処理するために put.php を実装します (ファイルを指定された場所に保存します)
人々は私が CGI スクリプトを書いたと言いました。 正直に言うと、彼らが何を言っているのか全く分かりませんでした。
- 本当にCGIスクリプトを書いたのでしょうか?
私の混乱が何なのか、皆さんが理解してくれたことを願っています。(私自身、どこで混乱しているのか分からないので)。皆さんには、できるだけ簡単に答えていただくようお願いします。私は、難しい専門用語をまったく理解できません。少なくとも、この場合は。
編集:
この素晴らしいチュートリアルを見つけました「CGI プログラミングは簡単です!」 - CGI チュートリアル、概念を可能な限り簡単に説明しています。この記事を読んだ後は、次の記事も読んでみてください。C での CGI プログラミング入門実際のコードサンプルで理解を深めてください。また、このチュートリアルへのリンクを Wikipedia の記事に追加しました。http://en.wikipedia.org/wiki/Common_Gateway_Interface
ベストアンサー1
CGIは、Webサーバーにアプリケーションとの間でデータを渡す方法を指示するインターフェースです。より具体的には、リクエスト情報が環境変数(リクエストタイプ、リモートIPアドレスなど)で渡される方法、リクエスト本体が標準入力を介して渡される方法、レスポンスが標準出力を介して渡される方法を記述します。CGI仕様詳細については。
画像を使用するには:
user (client) request for page ---> webserver ---[CGI]----> Server side Program ---> MySQL Server.
すべてではないにしても、ほとんどの Web サーバーは、プログラムを「CGI」として実行するように設定できます。つまり、Web サーバーは、リクエストを受信すると、データを特定のプログラムに転送し、いくつかの環境変数を設定し、標準入力と標準出力を介してパラメータをマーシャリングして、プログラムがどこで何を探すべきかを認識できるようにします。
主な利点は、Web サーバーとプログラムの両方が CGI の動作方法を認識していれば、Web から任意の実行可能コードを実行できることです。そのため、通常の CGI 対応 Web サーバーを使用して、C または Bash で Web プログラムを作成できます。また、ほとんどのプログラミング環境では、標準入力、標準出力、および環境変数を簡単に使用できます。
あなたの場合、スクリプトと Web サーバー間の通信に、PHP に固有の別の手段を使用した可能性が最も高いです。これは、質問でよく言及されているように、mod_php と呼ばれる組み込みインタープリターです。
それで、あなたの質問に答えます:
CGI とは何でしょうか?
上記を参照。
/cgi-bin/*.cgi は一体何なのでしょう? これは一体何なのでしょうか? サーバー上のこの cgi-bin ディレクトリが何のためにあるのかわかりません。なぜ *.cgi 拡張子が付いているのかわかりません。
これは CGI プログラムの従来の場所であり、多くの Web サーバーには、すべてのバイナリを CGI プログラムとして実行するように事前に構成されたこのディレクトリが付属しています。.cgi 拡張子は、CGI を介して動作することが期待される実行可能ファイルを示します。
なぜ Perl がいつも邪魔になるのでしょうか。CGI と Perl (言語)。私もこの 2 つが何なのかわかりません。ほとんどの場合、この 2 つを「CGI と Perl」の組み合わせで聞きます。この本は、もう 1 つの優れた例です。Perl による CGI プログラミングでは、「PHP/JSP/ASP による CGI プログラミング」ではダメです。私はそのような本を見たことがありません。
Perlは古くからある言語(PHP、JSP、ASPはCGIが古くからあった時代に生まれた言語ですが、PerlはCGIが新しく登場した頃から存在していました)であり、CGIを介して動的なWebページを提供するのに非常に優れた言語として有名になりました。現在では、WebサーバーでPerlを実行するための他の選択肢があります。主にパーレル。
CGI プログラミング C でこれって、すごく混乱します。C で?? マジで?? 何て言ったらいいのかわかりません。混乱しているだけです。「C で」?? これによってすべてが変わります。プログラムはコンパイルして実行する必要があります。これによって、Web プログラミングに対する私の見方が完全に変わります。いつコンパイルするのですか? プログラムはどのように実行されるのですか (マシン コードなので、独立したプロセスとして実行する必要があります)。Web サーバーとどのように通信するのですか? IPC ですか? また、ソケット プログラミングを使用してすべてのサーバー (私の例では MATLAB と MySQL) とインターフェイスするのですか? わかりません!!
実行ファイルを一度コンパイルすると、Web サーバーがプログラムを実行し、リクエスト内のデータをプログラムに渡して、受信した応答を出力します。CGI では、リクエストごとに 1 つのプログラム インスタンスが起動されることが指定されています。これが、CGI が非効率的で、今日では時代遅れになっている理由です。
CGI は廃止されたと言われています。もう使用されていません。本当にそうなのでしょうか? 最新のアップデートは何ですか?
CGIは、パフォーマンスが最優先ではなく、コードを実行するための単純な手段が必要な場合に今でも使用されています。前述の理由により非効率的であり、Web環境でプログラムを実行するためのより現代的な手段があります。現在最も有名なのは高速CGI。