ホームページ > バックエンド開発 > PHPチュートリアル > CGI FastCGI PHP-FPM の本当の意味を段階的に学びましょう

CGI FastCGI PHP-FPM の本当の意味を段階的に学びましょう

WBOY
リリース: 2016-06-23 13:17:15
オリジナル
1293 人が閲覧しました

CGIモデル

CGIとは、外部アプリケーション(CGIプログラム)とWebサーバー間のインターフェース規格であり、CGIプログラムとWebサーバー間で情報をやり取りするための手順です。

画像ソース http://mengkang.net/491.html

CGI の中核は、CGI が定義する環境変数です。

SERVER_NAME:运行CGI序为机器名或IP地址。SERVER_INTERFACE:WWW服务器的类型,如:CERN型或NCSA型。SERVER_PROTOCOL:通信协议,应当是HTTP/1.0。SERVER_PORT:TCP端口,一般说来web端口是80。HTTP_ACCEPT:HTTP定义的浏览器能够接受的数据类型。HTTP_REFERER:发送表单的文件URL。(并非所有的浏览器都传送这一变量)HTTP_USER-AGENT:发送表单的浏览的有关信息。GETWAY_INTERFACE:CGI程序的版本,在UNIX下为 CGI/1.1。PATH_TRANSLATED:PATH_INFO中包含的实际路径名。PATH_INFO:浏览器用GET方式发送数据时的附加路径。SCRIPT_NAME:CGI程序的路径名。QUERY_STRING:表单输入的数据,URL中问号后的内容。REMOTE_HOST:发送程序的主机名,不能确定该值。REMOTE_ADDR:发送程序的机器的IP地址。REMOTE_USER:发送程序的人名。CONTENT_TYPE:POST发送,一般为application/xwww-form-urlencoded。CONTENT_LENGTH:POST方法输入的数据的字节数。
ログイン後にコピー

リクエストを受け付けた後、Web サーバーはこれらの環境変数に値を割り当て、子プロセスを作成します。子プロセスでは、CGI プログラムがこれらの環境変数から値を取得します。このプロセスは CGI インターフェイスの実装です。

たとえば、Web サーバーとして C を、CGI プログラムとして PHP を取り上げます。

1. Web がソケット監視を開始すると、クライアントリクエストを受信します

GET /cgi-demo.php?a=b&c=d HTTP/1.1Host: localhost:9003Connection: keep-aliveAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36Accept-Encoding: gzip, deflate, sdchAccept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,ja;q=0.2
ログイン後にコピー

2. Web サーバーは環境変数に値を割り当てることができます

REQUEST_METHOD			GETQUERY_STRING			a=b&c=dSCRIPT_NAME				/cgi-demo.phpSERVER_PROTOCOL			HTTP/1.1SERVER_NAME				localhostSERVER_PORT 			9003
ログイン後にコピー

3. CGI プログラムはこれらの環境変数を解析して取得します

#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main(){   putenv("QUERY_STRING=a=b&c=d");   int pid = fork();   if (pid == 0)   {   		system("php cgi-demo.php");   }   return 0;}
ログイン後にコピー

cgi-demo.php 次に、親プロセスの Web サーバーによって設定された環境変数が子プロセスで取得されます

<?phpprintf("QUERY_STRING:%s\n", getenv("QUERY_STRING"));
ログイン後にコピー

上記 2 つのコードは、Web サーバーと CGI プログラムによる CGI インターフェイスの実装を示しているだけです。データの入出力は省略します。完全な Web サーバー + CGI プログラムのデモについては、http://mengkang.net/491.html を参照してください。

FastCGI モデル

FastCGI の核心は、従来の fork-and-execute メソッドを排除し、各起動の複雑さ 常駐方式でリクエストを処理するオーバーヘッド。 CGI インターフェイスで定義された値を環境変数から交換するスクリプトを実行する従来の CGI とは異なり、FastCGI にはソケット サービス対話の追加層があり、Web サーバーは FastCGI に続くパッケージに CGI インターフェイス データをカプセル化する必要があります。プロトコルを作成し、分析プログラムのために FastCGI に送信します。公式には、FastCGI プロセス マネージャーはソケットに基づいているため、分散型でもあり、Web サーバーと CGI プログラムを分散方式で展開できます。

コーディング...

PHP-FPM

コーディング...

一般的な概要については、

を参照してください

http://www.php-internals.com/book/?p=chapt02/02- 02- 03-fastcgi

FastCGI プロトコル仕様

http://www.fastcgi.com/devkit/doc/fcgi-spec.html

http://andylin02.iteye.com/blog/648412 (中国語版)

FastCGI プロセスマネージャーのシンプルな PHP 実装

http://my.oschina.net/goal/blog/196599

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート