关于cgi,fastcgi,phpcgi和phpfpm的理解

我在这里简单的说一下php-cgi与php-fpm的关系:

1、Linux下安装好php,会有“php”和“php-cgi”这两个可执行程序(在win下是php.exe和php-cgi.exe),这两个程序其实基本上是一样的,都是“php解释器”(就是php的核心),就是能把你写的php代码进行解释最后输出代码的结果。

2、既然php与php-cgi的功能都是“php解释器”,那它们的不同点在哪?不同点就在于提供的接口不同,php属于cli接口(client客户端接口),只能用命令去调用,而php-cgi则提供了fastCGI接口,fastCGI接口是一种“网络接口”,你可以通过网络的方式去调用它,比如nginx调用php-cgi可以用“fastcgi_pass 127.0.0.1:9000;”这样调用,其中的“127.0.0.1”你完全可以换成非本机ip,比如你在B服务器(ip为23.45.67.78)的9000上运行了一个php-fpm,那么你A服务器的nginx可以用“fastcgi_pass 23.45.67.78:9000;”这样去调用B服务器的php-fpm。

3、解释了php与php-cgi的区别,再来说php-cgi与php-fpm的区别。简单来说,就是php-cgi有很多缺点(具体是什么很多人回答,我就不说了),有些大牛觉得完全可以改进它,于是就有人写出了php-fpm,最初php-fpm是需要调用php-cgi来解释php代码的,php-fpm只起到进程管理的作用,但是因为php-fpm这个民间第三方写的工具实在比php-cgi好太多了,php官方在php5.4时就把它集成到了php官方发布的包中,并且php-fpm不需要再依赖php-cgi,直接把php解释器的功能集成进php-fpm了。

4、所以现在的php-fpm跟php和php-cgi都能解释php代码,只不过,php(强调一下这是可执行文件,在win下叫php.exe)是cli模式调用,即用命令调用,而php-cgi和php-fpm可以通过“网络”来调用,而所使用的网络协议叫“fastCGI协议”,只不过php-fpm比php-cgi高级很多。(注意,有人说php-cgi不支持fastCGI协议,我这里必须再次强调,这个说法是错的,具体请看我这篇文章https://www.xiebruce.top/606.html中的两个实例证明)。

需要强调一下:win不支持php-fpm,因为php-fpm是使用Linux的fork()来做的,所以win下面基本上还是使用php-cgi,当然有人用“Cygwin”这个软件可以在win下模拟Linux的fork(),但如果你是本地开发环境就没必要这么做了,用win10做开发的我建议你们考虑一下wsl。

总结:php-fpm就是php-cgi的升级版(并非简单的在php-cgi的基础上升级,而且通过直接采用第三方代码的方式,实质上是用php-fpm“替换”了php-cgi,而不是简单的升级,但我们可以理解为升级),总之,现在在linux服务器上用php-fpm即可,当然也有人用apache,用apache的话,php可以作为apache的模块,当然也可以用php-fpm的方式,因为apache有支持fastCGI的模块,让它可以像nginx一样,把用户请求的php文件转交给php-fpm处理。

php.exe和phpcgi,前者是用来在cli模式下解析php代码。后者是在web服务器,通过ip加端口的调用形式来解析php代码。
在php5.4之后。phpfpm已经继承了php解释器的功能,就是所phpfpm已经把phpfastcig继承了。不在单单是fastcgi的进程管理。已经有解释php代码的功能了。所以在php5.4之后。php的代码的解释器就是phpfpm了。
cgi是一种借口协议。有很多软件基于这种协议开发出了自己的程序,不如phpcgi,就是用来通过这种协议来解析php代码的。
fastcgi是cgi的升级版本。
由于在web服务器情况下,请求都是通过ip加端口的形式来发送。所以不能再通过cli模式了。所以目前都是通过cgi的形式来调用php解释器来及时php代码。
并且phpcgi的优势,是可以让web服务器和php服务器风离开。不能再放在一台服务器上了。因为本质上是可以通过ip加端口的形式来调用解释器的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值