php三种工作方式-CGI模式-FastCGI模式-Apache的mod_php

“跑呀跑呀跑呀跑呀,拼命努力着追上前面那个被目光期许的自己,生怕抓不住时光,只有和你一起的时候,才觉得不如就这样老了吧,也不算太辜负。”
### CGI
1
2
3
4
5
6
7
8
9
CGI英文全程是 Command Gateway Interface,通常翻译为公共网关接口,
HTTP服务器与机器上的其他程序进行通信的一个接口。
这个“其他程序”可以是使用任何计算机语言进行编 写,例如phppythonperl等等。
它通过CGI这个接口从HTTP服务器取得输入,然后把运行结果又通过CGI这个接口交给HTTP服务器, 而HTTP服务器把这个结果送给浏览器。

CGI 的出现让WEB从静态变为动态,随着web的越来越普及,很多的网站都需要有动态的页面,
以便与浏览者进行交互。CGI的缺点也越来越突出,因为HTTP 要生成一个动态页面,
系统就必须启动一个新的进程以运行CGI程序,
不断的fork是一项很消耗时间和资源的工作。

FastCGI

1
2
3
4
5
6
7
8
FastCGIFastCGI是可伸缩架构的CGI开放扩展,
其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。
传统的CGI 解释器的反复加载是CGI性能低下的主要原因,
如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,
则可以提供良好的性能、伸缩性等 。在上述情况中,你可以想象 CGI通常有多慢。
每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。
使用FastCGI,所有这些 都只在进程启动时发生一次。一个额外的好处是,
持续数据库连接(Persistent database connection)可以工作。

mod_php

1
2
3
4
5
6
7
8
9
10
11
12
在lamp体系中,对于apache端的php的配置,我们最常用的就是mod_php,
它把php作为apache一个内置的模块.让apache http服务器本身能够支持php语言,
不需要每一个请求就启动php解释器来解释php.

和把webserver与php绑定起来的方式不同,
fastcgi是http服务器与你的或其它机器上的程序进行“交谈”的一种工具,
相当于一 个程序接口。它可以接受来自web服务器的请求,解释输入信息,
将处理后的结果返回给服务器等。mod_fastcgi就是在apache下支持 fastcgi协议的模块。

在lamp体系中,mod_php是最常使用的工作方式。在这种模式下,
php被编译为apache的一个内置模块,在启动加载的时候,
当有一个php请求过来,直接在httpd进程里完成了php的解释运行,将结果返回。

mod_fastcgi

1
2
3
4
mod_fastcgi就是在apache下支持 fastcgi协议的模块。
fastcgi实例和apache分离开来,这两者可以分开来部署。
他们之间的通信通过tcp或者unix sock来完成。使用ext方式,
fastcgi实例是独立运行的。

FPM

1
2
3
FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,
对于高负载网站是非常有用的。

http://blog.shiliuvip.com/391.html
http://php.net/manual/zh/install.fpm.php