1
gouchaoer 2017-08-18 10:08:36 +08:00 via Android 1
php-cgi 是 php-fpm 中使用的 php 解释器,对应 php 为 php-cli 的解释器,二者默认加载扩展不太一样。。。你在一台安装 php 的机器上试试就知道了
|
2
Zzzzzzzzz 2017-08-18 10:28:16 +08:00
没关系
早先 php-cgi 就是拿来跑 php 写的 cgi 脚本的解释器, 后来 lighttpd 出了个 spawn-fcgi, 通过调度 cgi 解释器实现 fcgi 机制, 当时这个主要拿来给 ruby 用的, 但是托管 php-cgi 也行. 之后就出了 fpm, fpm 和 php-cgi 之间的关系是一开始 fpm 作为第三方模块的安装方式是给 php-cgi 模块打 patch, 后来合并进官方就成了独立的模块. |
3
Nagisa1992 OP @gouchaoer 明白了,原来是有两个解释器啊。那意思是现在的 php 虽然用的是 php-fpm 管理和解释,但 fpm 内部调用的还是 php-cgi 对吗?
|
4
Nagisa1992 OP @Zzzzzzzzz 那成了独立模块之后 php-fpm 管理和调度的到底是什么呢?
|
5
torbrowserbridge 2017-08-18 10:47:57 +08:00 via Android
@Nagisa1992 不对,
|
6
torbrowserbridge 2017-08-18 10:49:51 +08:00 via Android
@Nagisa1992 php-fpm 不需要 PHP-CGI
|
7
Zzzzzzzzz 2017-08-18 11:31:12 +08:00
@Nagisa1992 自己, 很传统的主进程调度, 子进程执行
|
8
gouchaoer 2017-08-18 11:37:33 +08:00
@torbrowserbridge 的确如此,我搞错了,我一直以后 php-fpm 内部会去调用名为 php-cgi 的解释器
|
9
Nagisa1992 OP @torbrowserbridge 是说 php-fpm 自己就可以当解释器吗?
|
10
ninerec 2017-08-18 12:10:17 +08:00
基于电脑上的 php7.0 说下。
执行 php-cgi -v,可以看到,所谓 php-cgi,其实就是 fpm-fcgi,或者说 cgi-fcgi,是 fastcgi。 然后 PHP-FPM 如大家所知,就是 FastCGI 的进程管理器,管理的就是 FastCGI 进程。 然后你在电脑上 ps & grep 看下进程,确实会有 php-fpm 的 Master/Worker 进程,php-cgi 进程,各司其职。 |
12
ninerec 2017-08-18 14:25:28 +08:00 1
@hheedat 抱歉,回答得不太仔细,也并不准确。看的机器是公司的,配置上可能不太通用,貌似也有些魔改的地方。
可以先参考下这篇文章: https://segmentfault.com/a/1190000009863108 我自己也得好好理解下 :sad: |
13
jsjscool 2017-08-18 14:26:03 +08:00 1
cgi 是一种协议,用 C 语言写 web 就是通过实现 cgi 协议的方式。fast cgi 是一种更高级的 cgi 协议,php-fpm 和 php-cgi 都是实现了 fast-cgi 协议的应用程序。你的服务器可以选择使用 php-cgi( 启动命令` php-cgi -b 127.0.0.1:9000`) ,也可以选择使用 php-fpm(启动命令`php-fpm -D`),甚至两个一起用都可以(端口不能用一个)。所以 php-cgi 和 php-fpm 其实就像 QQ 和微信一样,都是腾讯的 IM,只不过微信体验更好一些。
|
14
wbswjc 2017-08-18 16:56:34 +08:00
|
16
julyclyde 2017-08-21 19:00:36 +08:00
php-cgi、php-fpm、php-cli 等,分别是一种 SAPI
至于 SAPI 是什么,你可以去看 php 的文档 |
17
xiebruce 2018-11-08 12:19:24 +08:00
@gouchaoer php-cli 应该不叫解释器吧?真正的解释器是 php,也就是这个: https://i.loli.net/2018/11/08/5be3b8dbea650.png ,而 php-cgi 只是用于接收 web 服务器的请求,并处理其中的一些参数什么的把它处理成 php 能理解的,然后 php-cgi 调用 php 来解析,解析完再返回的 web 服务器,不知道这样理解对不?
|