【PHP进阶学习】—CGI、FAST-CGI、php-cgi、php-fpm的关系

前言

通常我们在PHP开发中都以LAMP或者LNMP的服务器环境部署web服务,在这些web开发过程中时常会遇到CGI、FASTCGI、PHP-CGI、PHP-FPM等的概念,为了避免对这些名词理解不清或者混淆,本文就来梳理和记录一下这些专有名词的概念和区别。

一、概念

1、CGI:指的是Web服务器与web应用程序之间的一种数据交换协议。
2、FastCGI:类似于CGI,Fast-CGI也是一种通信协议,但是它在CGI的基础上, 在效率上做了一些优化
3、PHP-CGI:PHP-CGI是PHP对Web服务器提供的CGI协议的接口程序,即实现了CGI协议的php解释器程序。它能解析PHP,也能通过CGI与web服务器通信。
4、PHP-FPM:是PHP对Web服务器提供的FastCGI协议的接口程序,即在实现解释PHP脚本和与web服务器通讯的基础上,额外还提供了相对 进程调度、任务管理功能。

二、PHP的响应请求的几种工作方式

1、CLI方式
PHP的CLI方式即是我们平时在系统中直接以php命令运行一些脚本的方式,也是我们常说的 命令行模式
这种SAPI模块主要用作PHP的开发外部命令应用,可以不经过服务器,直接运行php脚本,也不需要通过CGI协议把运行结果传递给服务器做出响应,只需直接在服务器终端返回运行结果响应即可;
2、PHP-CGI方式
PHP-CGI是一个单一进程控制器和php脚本解释器,即是一种由 请求→web服务器→PHP-CGI→web服务器→响应这样的工作方式,它实现了CGI协议,web服务器把请求的内容通过CGI协议(大多以socket形式)传递给PHP-CGI,PHP-CGI能解析php脚本并返回请求,同样以CGI协议返回给web服务器,这样便能处理完整的web请求。

3、PHP-CLI与PHP-CGI的区别:
(1) PHP-CLI输出没有任何头信息
(2)CLI会强制覆盖php.ini中的某些设置,因为这些设置在外壳环境下是没有意义的;

4、PHP-FPM方式
我们知道,CGI规定了服务器与解释器之间要传哪些数据、以什么样的格式传递给后方处理这个请求的协议,php脚本解释器在接受到请求后,解析php.ini文件,初始化执行环境,这些在PHP-CGI的工作方式中已经实现了。
那么PHP-FPM方式,其实就是一个实现了FastCGI协议,来代替CGI协议的PHP脚本解释和进程管理程序。
Fastcgi能提高性能,具体体现在普通的CGI需要“ 让php脚本解释器解析php.ini文件,初始化执行环境”;
而Fastcgi采用的方式是预先启一个master进程,解析配置文件,初始化执行环境,然后再启动多个worker子进程。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时, master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。
这样,PHP-FPM就是实现了这一协议的程序,而且已经被PHP官方纳入现在的版本自带当中。

5、Module方式
以Apache为例,在PHP Module方式中,会把php作为apache服务器的一个子模块来运行,即中间不需要经过复杂的协议进行通信。当通过web访问php文件时,apache就会调用php5_module来解析php代码。
所以工作方式就是: apache->httpd->php5_module->sapi->php
这种模式将php模块安装到apache中,所以每一次apache结束请求,都会产生一条进程,这个进程就完整的包括php的各种运算计算等操作;


                                


在上图中,我们很清晰的可以看到,apache每接收一个请求,都会产生一个进程来连接php通过sapi来完成请求,可想而知,如果一旦用户过多,并发数过多,服务器就会承受不住了。而且, 把mod_php编进apache时,出问题时很难定位是php的问题还是apache的问题


三、Nginx+PHP-FPM的工作模型图


四、总结
1、CGI是协议,规定web服务器如何与脚本解释器通信;
2、PHP-CGI实现了CGI协议,能响应web服务器请求,能初始化、fork进程,解析php脚本;
3、FastCGI是一个优化了的协议,除了规定web服务器与脚本解释器通信之外,能提供进程调度,动态管理的功能,效率提高;

4、PHP-FPM是实现了FastCGI协议的程序。


  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值