1.CGI: 一个协议
CGI针对每个http请求都是fork一个新进程来进行处理,处理过程包括解析php.ini文件,初始化执行环境等,
然后这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。
如果下次用户还请求动态资源,那么web服务器又再次fork一个新进程,周而复始的进行。
2.FASTCGI : CGI的协议的优化。
FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
3.PHP-CGI: CGI协议的一种实现 , 也就是php解析器。
- 在CGI 模式时,当Web Server 收到 xx/index.php 请求时,会启动php-cgi,php-cgi 会解析php.ini 文件,初始化环境,然后根据请求参数进行处理,再返回处理后的结果。(都是以CGI 协议规范来进行)
- php-cgi 在每个请求时都会启动一个进程,然后读取php.ini 进行解析,可想而知效率相对比较低。
- php-cgi 无法实现平滑重启。修改php.ini 配置后,后面启动的php-cgi 程序还是不会感知
4.PHP-FPM: fastcgi协议的一种实现。
- 当请求到来时,php-fpm 启动并读取php.ini 文件完成初始化环境,然后启动一个master,再启动多个worker。当请求过来时,master 会传递给一个worker,然后等待下一个请求。php-fpm 会动态配置worker 的数量。
- 一个php-fpm 进程可以处理多个请求,会启动多个php-cgi 程序。
- php-fpm 可以实现平衡重启。修改php.ini 后,当启用新的worker 会使用新的配置。
5.mod_php: mode_php 是Apache 的一个模块,把PHP 解释器嵌入到Apache 进程中。
参考文章:http://www.thinkphp.cn/topic/42338.html https://www.zhihu.com/question/30672017?sort=created