潍坊达内负责整理:另外,在 CGI 模式下,php-cgi 在 php.ini 配置变更后,需要重启 php-cgi 进程才能让新的 php-ini 配置生效,不可以平滑重启.而在 FastCGI 模式下,PHP-FPM 可以通过生成新的子进程来实现 php.ini 修改后的平滑重启.
PHP-FPM(PHP-FastCGI Process Manager)是 PHP 语言中实现了 FastCGI 协议的进程管理器,由 Andrei Nigmatulin 编写实现,已被 PHP 官方收录并集成到内核中.
FastCGI 模式的优点:
从稳定性上看,FastCGI 模式是以独立的进程池来运行 CGI 协议程序,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑;
从安全性上看,FastCGI 模式支持分布式运算.FastCGI 程序和宿主的 Server 完全独立,FastCGI 程序挂了也不影响 Server;
从性能上看,FastCGI 模式把动态逻辑的处理从 Server 中分离出来,大负荷的 I O处理还是留给宿主 Server,这样宿主 Server 可以一心一意处理 IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分,大量的是图片等静态.
FastCGI 模式是目前 PHP 主流的 WEB 服务运行模式,拥有高效可靠的性能,推荐大家使用.

Module 模式
PHP 常常与 Apache 服务器搭配形成 LAMP 配套的运行环境.把 PHP 作为一个子模块集成到 Apache 中,就是 Module 模式,Apache 中的常见配置如下:
LoadModule php5_module modules/mod_php5.so
这使用了 LoadModule 命令,该命令的第一个参数是模块的名称,名称可以在模块实现的源码中找到.第二个选项是该模块所处的路径.如果需要在服务器运行时加载模块,可以通过发送信号 HUP 或者 AP_SIG_GRACEFUL 给服务器,一旦接受到该信号,Apache 将重新装载模块,而不需要重新启动服务器.通过注册到 apache2 的 ap_hook_post_config 挂钩,在 Apache 启动的时候启动此模块以接受 PHP 文件的请求.
例如,当客户端访问 PHP 文件时,Apache 就会调用 php5_module 来解析 PHP 脚本.Apache 每接收到一个请求,都会产生一个进程来连接 PHP 完成请求.在 Module 模式下,有时候会因为把 PHP 作为模块编进 Apache,而导致出现问题时很难定位是 PHP 的问题还是 Apache 的问题.
过去,凭借着丰富的模块和功能,企业往往将 Apache 作为 WEB 服务器,于是以 Module 模式运行的 PHP + Apache 的组合很常见.近些年,以异步事件驱动、高性能的 Nginx 服务器的崛起,市场份额快速增长,以 FastCGI 模式运行的 PHP + Nginx 组合,拥有更佳的性能,有赶超 Apache 的趋势.
ISAPI 模式
ISAPI(Internet Server Application Program Interface)是微软提供的一套面向 Internet 服务的 API 接口,一个 ISAPI 的 DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个 DL L里设置多个用户请求处理函数,此外,ISAPI 的 DLL 应用程序和 WEB 服务器处于同一个进程中,效率要显着高于CGI.由于微软的排他性,只能运行于 Windows 环境.
以上就是潍坊达内给大家做的内容详解,更多关于IT的学习,请继续关注潍坊达内