Jadual Kandungan
CGI 模型
FastCGI 模型
PHP-FPM
大概的介绍可以看
FastCGI协议规范
FastCGI 进程管理器的 PHP 简单实现
Rumah pembangunan bahagian belakang tutorial php 一步步领悟 CGI FastCGI PHP-FPM 的真正奥义

一步步领悟 CGI FastCGI PHP-FPM 的真正奥义

Jun 23, 2016 pm 01:17 PM

CGI 模型

CGI 是外部应用程序( CGI 程序)与 Web 服务器之间的接口标准,是在 CGI 程序和 Web 服务器之间传递信息的规程。

图片来源 http://mengkang.net/491.html

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方法输入的数据的字节数。
Salin selepas log masuk

Web 服务器在接受请求之后对这些环境变量赋值,然后创建一个子进程,在子进程中 CGI 程序通过这些环境变量取值。这个过程就是对 CGI 接口的实现。

举个例子以 C 为 Web 服务器,PHP 作为 CGI 程序。

1. Web 启动 Socket 监听之后,接受到一个客户端的请求

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
Salin selepas log masuk

2. Web 服务器就可以给环境变量赋值了

REQUEST_METHOD			GETQUERY_STRING			a=b&c=dSCRIPT_NAME				/cgi-demo.phpSERVER_PROTOCOL			HTTP/1.1SERVER_NAME				localhostSERVER_PORT 			9003
Salin selepas log masuk

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;}
Salin selepas log masuk

cgi-demo.php 则在子进程中获取到 web 服务器在父进程设置的环境变量

<?phpprintf("QUERY_STRING:%s\n", getenv("QUERY_STRING"));
Salin selepas log masuk

上面这两段代码仅仅是演示 Web 服务器和 CGI 程序对 CGI 接口的实现,对数据的输入输出都省略没写。完整的Web 服务器 + CGI 程序demo 可以参考 http://mengkang.net/491.html

FastCGI 模型

FastCGI 的核心则是取缔传统的 fork-and-execute 方式,减少每次启动的巨大开销,以常驻的方式来处理请求。区别于传统的 CGI 是执行脚本从环境变量中换取 CGI 接口定义的值,而 FastCGI 则又多了一层 socket 服务的交互,Web 服务器需要将 CGI 接口数据封装在遵循 FastCGI 协议包中发送给 FastCGI 解析器程序。正式因为 FastCGI 进程管理器是基于 socket 的,所以也是分布式的,所以 Web 服务器和 CGI 程序可以分布部署。

coding...

PHP-FPM

coding...

大概的介绍可以看

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

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

11 skrip pemendek URL terbaik PHP (percuma dan premium) 11 skrip pemendek URL terbaik PHP (percuma dan premium) Mar 03, 2025 am 10:49 AM

URL panjang, sering berantakan dengan kata kunci dan parameter penjejakan, boleh menghalang pelawat. Skrip pemendekan URL menawarkan penyelesaian, mewujudkan pautan ringkas yang sesuai untuk media sosial dan platform lain. Skrip ini sangat berharga untuk laman web individu a

Pengenalan kepada API Instagram Pengenalan kepada API Instagram Mar 02, 2025 am 09:32 AM

Berikutan pengambilalihan berprofil tinggi oleh Facebook pada tahun 2012, Instagram mengadopsi dua set API untuk kegunaan pihak ketiga. Ini adalah API Grafik Instagram dan API Paparan Asas Instagram. Sebagai pemaju membina aplikasi yang memerlukan maklumat dari a

Bekerja dengan Data Sesi Flash di Laravel Bekerja dengan Data Sesi Flash di Laravel Mar 12, 2025 pm 05:08 PM

Laravel memudahkan mengendalikan data sesi sementara menggunakan kaedah flash intuitifnya. Ini sesuai untuk memaparkan mesej ringkas, makluman, atau pemberitahuan dalam permohonan anda. Data hanya berterusan untuk permintaan seterusnya secara lalai: $ permintaan-

Respons HTTP yang dipermudahkan dalam ujian Laravel Respons HTTP yang dipermudahkan dalam ujian Laravel Mar 12, 2025 pm 05:09 PM

Laravel menyediakan sintaks simulasi respons HTTP ringkas, memudahkan ujian interaksi HTTP. Pendekatan ini dengan ketara mengurangkan redundansi kod semasa membuat simulasi ujian anda lebih intuitif. Pelaksanaan asas menyediakan pelbagai jenis pintasan jenis tindak balas: Gunakan Illuminate \ Support \ Facades \ http; Http :: palsu ([ 'Google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React Bina aplikasi React dengan hujung belakang Laravel: Bahagian 2, React Mar 04, 2025 am 09:33 AM

Ini adalah bahagian kedua dan terakhir siri untuk membina aplikasi React dengan back-end Laravel. Di bahagian pertama siri ini, kami mencipta API RESTful menggunakan Laravel untuk aplikasi penyenaraian produk asas. Dalam tutorial ini, kita akan menjadi dev

Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Curl dalam PHP: Cara Menggunakan Pelanjutan PHP Curl dalam API REST Mar 14, 2025 am 11:42 AM

Pelanjutan URL Pelanggan PHP (CURL) adalah alat yang berkuasa untuk pemaju, membolehkan interaksi lancar dengan pelayan jauh dan API rehat. Dengan memanfaatkan libcurl, perpustakaan pemindahan fail multi-protokol yang dihormati, php curl memudahkan execu yang cekap

12 skrip sembang php terbaik di codecanyon 12 skrip sembang php terbaik di codecanyon Mar 13, 2025 pm 12:08 PM

Adakah anda ingin memberikan penyelesaian segera, segera kepada masalah yang paling mendesak pelanggan anda? Sembang langsung membolehkan anda mempunyai perbualan masa nyata dengan pelanggan dan menyelesaikan masalah mereka dengan serta-merta. Ia membolehkan anda memberikan perkhidmatan yang lebih pantas kepada adat anda

Pengumuman Penyiasatan Situasi PHP 2025 Pengumuman Penyiasatan Situasi PHP 2025 Mar 03, 2025 pm 04:20 PM

Tinjauan Landskap PHP 2025 menyiasat trend pembangunan PHP semasa. Ia meneroka penggunaan rangka kerja, kaedah penempatan, dan cabaran, yang bertujuan memberi gambaran kepada pemaju dan perniagaan. Tinjauan ini menjangkakan pertumbuhan dalam PHP Versio moden

See all articles