000-PHP运行原理

目前常见的4种PHP运行模式

1.CGI通用网关接口模式

2.FAST-CGI模式

3.CLl命令行模式

4.模块模式

运行模式:

1.CGI通用网关接口模式

每有一个用户请求,都会先要创建cgi的子进程,然后处理请求,处理完后结束这个子进程

cgi是一种为了保证web server传递过来的数据是标准格式的通用网关接口协议

比较老,比较原始,大多已经不用了

2.FAST-CGI模式

是cgi的升级版本,FastCGl像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次,也是—种协议。

FastCGl的工作原理是:

(1)、Web Server启动时载入FastCGl进程管理器【PHP的FastCGl进程管理器是PHP-FPM(php-FastCG/ Process Manager)】(IIS ISAPI或Apache Module);

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

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

(4)、FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGl子进程关闭连接时,请求便

告处理完成。FastCGI子进程接着等待并处理来自FastCGIl进程管理器(运行在WebServer中)的下一个连接。在正常的CGl模式中,php-cgi.exe在此便退出了。

在CGI模式中,可以想象CGl通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dl扩展并重初始化

全部数据结构。使用FastCGl,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

3.CLl命令行模式

—般使用调用脚本、查看php信息时会使用到该模式

php -r"phpinfo();" |less分页显示

4.模块模式

1.Apache + mod_php

2.lighttp + spawn-fcgi

3.nginx +PHP-FPM

运行原理:

PHP-CG/: fast-cgi是一种协议,而php-cgi是实现了这种协议的进程。不过这种实现比较烂。它是单进程的,一个进程处理一个请求,处理结束后进程就销毁

PHP-FPM:是对php-cgi的改进版,它直接管理多个php-cg进程/线程。也就是说,php-fpm是php-cgi的进程管理器因此它也算是fastcgi协议的实现

php的运行原理,就是在服务器启动时,自动载入PHP-FPM进程管理器,从而管理多个PHP-CGl进程来准备响应用户的请求,

如下图所示:


你可能感兴趣的:(000-PHP运行原理)