(1)Web Server启动时载入FastCGI进程管理器(Apache Module或IIS ISAPI等)
(2)FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可建多个php-cgi),并等待来自Web Server的链接。
(3)当客户端请求到达Web Server时,FastCGI进程管理器选择并链接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
(4)FastCGI子进程完成处理后,将标准输出和错误信息从同一链接返回Web Server。当FastCGI子进程关闭链接时,请求便告处理完成。FastCGI子进程接着等待,并处理来自FastCGI进程管理器(运行在Web Server中)的下一个链接。 在CGI模式中,php-cgi在此便退出了
什么是php-fpm?
fpm是FastCGI Process Manager的缩写,那么,fpm就是FastCGI进程管理器的简称。
php-fpm就是php中的FastCGI进程管理器。
对于php5.3以前的版原本说,php-fpm是一个第三方的补丁包,旨在将FastCGI进程管理整合进PHP包中。
在php5.3以后的版本中,php-fpm再也不是第三方的包,它已经被集成到php的源码中了。php-fpm提供了更好的PHP进程管理方式,能够有效控制内存和进程、能够平滑重载PHP配置,比spawn-fcgi具备更多优势,因此php-fpm被PHP官方收购了。
php-fpm的管理对象是php-cgi。但不能说php-fpm是fastcgi进程的管理器,由于前面说了fastcgi是个协议,彷佛没有这么个进程存在,就算存在php-fpm也管理不了他(至少目前是)。 有的说,php-fpm是php内核的一个补丁之前是对的。由于最开始的时候php-fpm没有包含在PHP内核里面,要使用这个功能,须要找到与源码版本相同的php-fpm对内核打补丁,而后再编译。后来PHP内核集成了PHP-FPM以后就方便多了,使用--enalbe-fpm
这个编译参数便可。