目前常见的4种PHP运行模式CGI通用网关接口模式FAST-CGI模式CLI命令行模式模块模式运行模式CGI通用网关接口模式每次有用户请求时,首先创建一个cgiCGI是通用的网关接口协议,确保Web服务器传递的数据是标准格式。协议比较古老和原始,大部分已经不再使用了。FAST-CGI模式是cgi的升级版,FastCGI就像一个常驻(long-live)的CGI,可以一直执行,只要激活,每次fork一次都不会花时间,这也是一个协议FastCGI的工作原理是的: (1),在WebServer启动时加载FastCGI进程管理器【PHP的FastCGI进程管理器是PHP-FPM(php-FastCGIProcessManager)】(IISISAPI或阿帕奇模块); (2),FastCGI进程管理器进行自身初始化,启动多个CGI解释器进程(在任务管理器中可以看到多个php-cgi.exe),等待来自WebServer的连接。 (3)。当客户端请求到达Web服务器时,FastCGI进程管理器选择并连接到CGI解释器。Web服务器将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。 (4)。FastCGI子进程完成处理后,标准输出和错误信息从同一个连接返回给WebServer。当FastCGI子进程关闭连接时,请求被处理。FastCGI子进程然后等待并处理来自FastCGI进程管理器(在WebServer中运行)的下一个连接。在普通CGI模式下,php-cgi.exe在这里退出。 在CGI模式下,你可以想象CGI通常有多慢。每次web请求PHP都必须重新解析php.ini,重新加载所有dll扩展并重新初始化所有数据结构。使用FastCGI,所有这些只发生一次,即在进程启动时。一个额外的好处是持久数据库连接(Persistentdatabaseconnection)可以工作。CLI命令行方式一般在调用脚本和查看php信息时使用。php-r"phpinfo();"|less页面显示模块方式Apache+mod_phplighttp+spawn-fcginginx+PHP-FPM工作原理PHP-CGI:fast-cgi是一个协议,php-cgi是实现这个协议的进程。但是,这个实现比较差。是单进程的,一个进程处理一个请求,处理完进程销毁。PHP-FPM:是php-cgi的改进版,直接管理多个php-cgi进程/线程。也就是说php-fpm是php-cgi的进程管理器,所以也是fastcgi协议的实现。php的运行原理是在服务器启动时自动加载PHP-FPM进程管理器,从而管理多个PHP-CGI进程准备响应用户的请求,如下图所示:由于php-cgi是随服务器启动加载,初始化变量只会发生一次,运行原理是进入超市后进入固定步行路线,通过不同的运行模式进入底层(进入超市)
