ホームページ  >  記事  >  バックエンド開発  >  CGIとPHPの違いは何ですか?

CGIとPHPの違いは何ですか?

青灯夜游
青灯夜游オリジナル
2020-08-19 15:45:432802ブラウズ

違い: CGI はプロトコルおよび標準であり、言語ではなく仕様です。この標準に従って、さまざまな言語 (PHP を含む) でプログラムを作成して、Web ページのリクエストを処理し、データをクライアントに返すことができます。ブラウザ。 PHP は動的 Web 開発言語であり、CGI モードまたは ISAPI や NSAPI などのモジュールで動作します。

CGIとPHPの違いは何ですか?

CGI はユニバーサル ゲートウェイ プロトコルであり、動的 Web ページを開発するための標準です . この標準に従う場合は、BAT を使用できます。 CMD、sh、PERL、C、C、PERL、PHP などの言語で書かれたプログラムは、Web ページのリクエストを処理し、クライアント ブラウザにデータを返します。 CGI はプロトコルおよび標準であり、言語ではなく仕様です。

cgi はインターフェースであり、どの言語を使用しても、このインターフェースに従って実装できます。一般に、サーバーは CGI プログラムを呼び出す必要があると判断する前に、要求された GET パラメーターを環境変数 QUERY_STRING に配置し、POST 要求の内容が標準入力ストリームを通じて CGI プログラムに送信されます。 CGI プログラムは、HTTP プロトコル (HTTP ヘッダーと HTTP ボディを含む) を標準出力ストリーム stdout に出力するだけでよく、サーバーはそれらをブラウザーに直接送信します。

//c++实现cgi接口,打印query string和post data
#include <iostream>
 
using namespace std;
 
int main() {
    cout << "Content-type:text/html\n\n";
    const char *queryString = getenv("QUERY_STRING");
    if (queryString != NULL) {
        cout << "<h1>query string is :" << queryString << "</h1>" << endl;
    } else {
        cout << "<p>No query string</p>" << endl;
    }
     
    string postData, tmpData;
    while(cin >> tmpData) {
        postData += tmpData;
    }
    if (postData != "") {
        cout << "<div> " << postData << " </div>" << endl;
    } else {
        cout << "<p>No post data</p>" << endl;
    }
     
    return 0;
}

これをコンパイルし、test.cgi という名前を付けて、サーバーの cgi ディレクトリにスローします。次に、http://localhost/cgi/test.cgi?a=b&c=d のような URL にアクセスすると、サーバーは a=b&c=d を QUERY_STRING 環境変数に入れて test.cgi に渡します。最後に、クエリ文字列「a=b&c=d」がページに表示されていることがわかります。フォームを作成して http://localhost/cgi/test.cgi にデータを POST することもでき、ページにすべての POST データが表示されることを確認できます。

PHP は動的 Web 開発言語であり、主にブラウザーから送信されたデータを処理し、結果をブラウザーに返すために使用されます。 PHP は CGI モードまたは ISAPI や NSAPI などのモジュールで動作します。

PHP で CGI プログラムを作成します:

#!/usr/env php
<?php
echo "Content-type:text/html\n\n";
 
$queryString = $_ENV("QUERY_STRING");
if ($queryString != NULL) {
    echo "<h1>query string is : $queryString</h1>";
} else {
    echo "<p>No query string</p>";
}
 
$postData = file_get_contents("php://stdin");
if ($postData != "") {
    echo "<div> $postData </div>";
} else {
    echo "<p>No post data</p>";
}
?>

わかりました。機能は上記の C で作成したプログラムとまったく同じです。「実行可能属性」chmod x testphp を追加しましょう。次に、cgi はそれを cgi ディレクトリにスローし、http://localhost/cgi/testphp.cgi?a=b&c=d にアクセスし、それにフォーム ポスト データを使用します。

サーバーが CGI プログラムを呼び出すとき、その実装に何を使用するかは気にしないこともお分かりいただけたかと思いますが、インターフェースはすでに設定されているため、インターフェースに従ってプログラムするだけで済みます。

しかし、一般に、サーバーが PHP を呼び出すロジックと CGI プログラムを呼び出すロジックは異なります。 CGI プログラムは QUERY_STRING と POST_DATA を独自に解析する必要があり、PHP は別の拡張機能セットを介してサーバーと対話する必要があるため、PHP で直接 Web ページを作成する場合、Web ページの作成方法は通常とは大きく異なります。サーバーの PHP 拡張機能は、クエリ文字列を解析し、データを配列にポストするのに役立ちました。値を直接取得するだけです:

<?php
 
if (isset($_GET)) {
    print_r($_GET);
} else {
    echo "<p>No query string</p>";
}
 
if (isset($_POST)) {
    print_r($_POST);
} else {
    echo "<p>No post data</p>";
}
?>

test.php として保存し、http://localhost/test にアクセスします。 .php?a=b&c =d、またはページへのフォーム送信コンテンツ。出力データが構造化され、配列になっていることがわかります。さらに、(特別な状況を除いて) HTTP ヘッダーを自分で出力する必要もなくなりました。

関連知識の詳細については、PHP 中国語 Web サイト をご覧ください。

以上がCGIとPHPの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。