关于 PHP -cgi 和 PHP -fpm 的一个困惑 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Nagisa1992
V2EX    PHP

关于 PHP -cgi 和 PHP -fpm 的一个困惑

  •  
  •   Nagisa1992 2017-08-18 09:57:01 +08:00 5128 次点击
    这是一个创建于 2986 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我之前一直理解是 php-cgi 是 php 程序的解释器,而 php-fpm 是 php-cgi 的进程管理器,负责调度 php-cgi 进程解释 php。
    但是今天又看到一个说法,说在 php5.4 之前才是这样,php5.4 之后 php-cgi 和 php-fpm 就没有关系了,php-fpm 既是管理器又是解释器,而 php-cgi 已经废弃了没什么人用了,可是我在我 php5.6 的 mac 上查看进程却依然还是有 php-cgi 的进程。所以 php-cgi 现在到底是一个什么样的存在? php-cgi php-fpm 到底是什么关系? php-fpm 管理的到底是 php 还是 php-cgi ?

    参考: https://www.zhihu.com/question/55835080/answer/146775419
    以及 https://zhuanlan.zhihu.com/p/20694204 这篇文章下面的评论第二页
    17 条回复    2018-11-08 12:19:24 +08:00
    gouchaoer
        1
    gouchaoer  
       2017-08-18 10:08:36 +08:00 via Android   1
    php-cgi 是 php-fpm 中使用的 php 解释器,对应 php 为 php-cli 的解释器,二者默认加载扩展不太一样。。。你在一台安装 php 的机器上试试就知道了
    Zzzzzzzzz
        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, 后来合并进官方就成了独立的模块.
    Nagisa1992
        3
    Nagisa1992  
    OP
       2017-08-18 10:44:54 +08:00
    @gouchaoer 明白了,原来是有两个解释器啊。那意思是现在的 php 虽然用的是 php-fpm 管理和解释,但 fpm 内部调用的还是 php-cgi 对吗?
    Nagisa1992
        4
    Nagisa1992  
    OP
       2017-08-18 10:46:33 +08:00
    @Zzzzzzzzz 那成了独立模块之后 php-fpm 管理和调度的到底是什么呢?
    torbrowserbridge
        5
    torbrowserbridge  
       2017-08-18 10:47:57 +08:00 via Android
    @Nagisa1992 不对,
    torbrowserbridge
        6
    torbrowserbridge  
       2017-08-18 10:49:51 +08:00 via Android
    @Nagisa1992 php-fpm 不需要 PHP-CGI
    Zzzzzzzzz
        7
    Zzzzzzzzz  
       2017-08-18 11:31:12 +08:00
    @Nagisa1992 自己, 很传统的主进程调度, 子进程执行
    gouchaoer
        8
    gouchaoer  
       2017-08-18 11:37:33 +08:00
    @torbrowserbridge 的确如此,我搞错了,我一直以后 php-fpm 内部会去调用名为 php-cgi 的解释器
    Nagisa1992
        9
    Nagisa1992  
    OP
       2017-08-18 11:48:09 +08:00
    @torbrowserbridge 是说 php-fpm 自己就可以当解释器吗?
    ninerec
        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 进程,各司其职。
    hheedat
        11
    hheedat  
       2017-08-18 12:45:15 +08:00
    @ninerec 没有 php-cgi 进程啊
    ninerec
        12
    ninerec  
       2017-08-18 14:25:28 +08:00   1
    @hheedat 抱歉,回答得不太仔细,也并不准确。看的机器是公司的,配置上可能不太通用,貌似也有些魔改的地方。
    可以先参考下这篇文章: https://segmentfault.com/a/1190000009863108
    我自己也得好好理解下 :sad:
    jsjscool
        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,只不过微信体验更好一些。
    wbswjc
        14
    wbswjc  
       2017-08-18 16:56:34 +08:00
    hheedat
        15
    hheedat  
       2017-08-18 23:14:47 +08:00
    @jsjscool
    @ninerec
    多谢!
    julyclyde
        16
    julyclyde  
       2017-08-21 19:00:36 +08:00
    php-cgi、php-fpm、php-cli 等,分别是一种 SAPI
    至于 SAPI 是什么,你可以去看 php 的文档
    xiebruce
        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 服务器,不知道这样理解对不?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2621 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 15:15 PVG 23:15 LAX 08:15 JFK 11:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86