PHP运行模式和生命周期

PHP运行模式主要有四种

1  cgi

2 fast-cgi

3 cli 命令行

4 web模块模式

CGI模式

CGI(Common Gateway Interface),公共网关接口,它是Web服务器与外部应用程序(CGI程序)之间传递信息的接口标准。

web服务器会根据请求的内容,fork一个子进程启动CGI程序,这里就是指PHP的解析器,PHP解析器程序启动后,它就会解析php.ini文件,初始化执行环境,然后解析动态脚本,再把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。当下次再有php任务请求时,再重复之前的操作。

优点:

把web server和具体的程序处理分开,结构清晰

缺点:每次处理请求都会重启cgi程序(PHP解析器),cgi程序需要解析php.ini等初始化工作,造成效率低下,服务器负担加重

FastCGI模式

FastCGI就像是一个常驻(long-live)型的CGI程序,它可以一直运行着。其主要行为是将CGI解释器进程保持在内存中并因此获得高效的性能。当客户端请求Web服务器上的动态脚本时,Web服务器会将动态脚本通过TCP协议交给FastCGI主进程,FastCGI主进程根据情况,安排一个空闲的子进程来解析动态脚本,处理完成后将结果返回给Web服务器,Web服务器再将结果返回给客户端。该客户端请求处理完毕后,FastCGI子进程并不会随之关闭,而是继续等待主进程安排工作任务。

工作原理:

(1)Web Server启动时载入FastCGI进程管理器(PHP的FastCGI进程管理器是PHP-FPM)

(2)FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (在任务管理器中可见多个php-cgi.exe)并等待来自Web Server的连接。

(3)当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

(4)FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。在正常的CGI模式中,php-cgi.exe在此便退出了。

优点:

(1)从稳定性上看, fastcgi是以独立的进程池运行来cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分 配新的进程来运行逻辑。

(2)从安全性上看,Fastcgi支持分布式运算。FastCGI程序也可以和Web服务器分别部署在不同的主机上,它还可以接受来自其他Web服务器的请求。也就是说fastcgi和宿主的server完全独立, fastcgi宕掉不会影响到server。

(3)从性能上看, fastcgi把动态逻辑的处理从server中分离出来, 大负荷的IO处理留给宿主server, 这样宿主server可以一心一意处理IO。

CLI模式

CLI(Command Line Interface)即命令行运行模式,如在终端输入php a.php运行php文件或者直接输入 php -r “print_r(get_defined_constants());” 执行php代码。

web模块模式

Web服务器内置模块,如apache的mod_ php模块,微软iis的ISAPI,nginx的php-fpm,将php解释器做成模块加载到服务器中。这样,随着服务器的启动,PHP解释器模块也会随之启动。Apache的模块可以在运行的时候动态装载,这意味着对服务器可以进行功能扩展而不需要重新对源代码进行编译,甚至根本不需要停止服务器。我们所需要做的仅仅是给服务器发送信号HUP或者AP_SIG_GRACEFUL通知服务器重新载入模块。但是在动态加载之前,我们需要将模块编译成为动态链接库。此时的动态加载就是加载动态链接库。 Apache中对动态链接库的处理是通过模块mod_so来完成的,因此mod_so模块不能被动态加载,它只能被静态编译进Apache的核心,这意味着它是随着Apache一起启动的。

缺点:mod_php 这种嵌入的方式最大的弊端就是内存占用大,不论是否用到PHP解释器都会将其加载到内存中。

————————————————

https://blog.csdn.net/IT_10/article/details/95031491 轉自

你可能感兴趣的:(PHP运行模式和生命周期)