1.CGI(通用网关接口/ Common Gateway Interface)

2.FastCGI(常驻型CGI / Long-Live CGI)

3.CLI(命令走运行 / Command Line Interface)

php这行带你熟悉PHP运行模式 Webpack

4.LoadModule【Apache独占】

5.ISAPI(Internet Server Application Program Interface)【IIS独占】

备注:在PHP5.3往后,PHP不再有ISAPI模式,安装后也不再有php5isapi.dll这个文件。
要在IIS6上利用高版本PHP,必须安装FastCGI 扩展,然后使IIS6支持FastCGI。

查看当前运行模式

echo php_sapi_name();

CGI模式

先容:

CGI即通用网关接口(Common Gateway Interface),它是一段程序,普通地讲CGI就像是一座桥,把网页和Web做事器中的实行程序连接起来,它把HTML吸收的指令通报给做事器的实行程序,再把做事器实行程序的结果返还给HTML页。
CGI 的跨平台性能极佳,险些可以在任何操作系统上实现。

调用过程:Fork-And-Execute模式

用户要求 —> web做事器吸收要求【常用Nginx、apache】—> fork CGI的子进程&处理要求 —-> 要求处理完毕,返回结果到web做事器&销毁子进程 —> web做事器返回结果给用户

上风:

作为PHP最早的运行模式,每次要求都独立处理,调用过程足够大略清晰,可控性强

进程间是隔离的,担保数据不会被污染

劣势:

每次要求都须要fork一个新的CGI子进程,如果同一韶光并发要求一千,意味着就要fork一千个子进程,这就会导致几个问题:

fork子进程须要韶光,须要占用内存【copy-on-write】

子进程过多,会导致CPU将大量的韶光花费在高下文切换上

每次要求须要重新加载干系资源

FastCGI模式

先容:

FastCGI是CGI的升级版本,FastCGI像是一个常驻 (long-live)型的 CGI,在启动web做事器的时候载入FastCGI进程管理器【PHP-FPM、IIS ISAPI、Apache Module】,当有要求过来的时候,web做事器只须要交给FastCGI进程管理器处理即可。

调用过程:以 PHP-FPM 为例

web做事器启动的时候 启动 PHP-FPM master进程(紧张卖力分配要求给空闲的自子进程处理)以及一定数量的fast-cgi子进程(卖力处理要求)。
PHP-FPM master进程管理一个进程池,池里有多少个fast-cgi子进程,每个fast-cgi子进程单独处理一个要求,互不干涉。

用户要求 —> web做事器吸收要求【常用Nginx、apache】—> 检测到是PHP要求&转发给FPM master进程 —> FPM master进程 指定空闲fast-cgi子进程处理要求 —> 子进程载入文件(如php.ini)及其他资源处理要求 —> 处理结束&打消资源,结果返回master & 子进程挂起,标记为空闲—> master 将结果返回web做事器 —> web做事器返回结果给用户

上风:

从稳定性上看,FastCGI因此独立的进程池来运行CGI,单独一个进程去世掉,系统可以很轻易地丢弃,然后重新分配新的进程来运行逻辑

从安全性上看,FastCGI和宿主的web Server完备独立,FastCGI 不会影响web 做事器的运行【如果PHP-FPM处于关闭状态,则会返回502 bad gateway 给用户】

从性能上看,FastCGI把动态逻辑的处理从 web Server等分离出来,大负荷的IO处理还是留给宿主Server,这样宿主Server可以齐心专心一意作IO【对付一个普通的动态网页来说, 逻辑处理可能只有一小部分,更多的是图片等静态资源的加载】

劣势:

一个fast-cgi子进程同一韶光只能处理一个要求,以是网站的并发性能就受限于子进程数量

如果开启的进程过多,会导致CPU将大量的韶光摧残浪费蹂躏在进程的高下文切换上。

每次要求fast-cgi子进程都须要重新加载干系资源,要求结束须要开释资源

CLI(命令走运行 / Command Line Interface)

简介:

php-cli模式属于命令行模式,对付很多刚开始学php就开始wamp,wnmp的开拓者来说是最陌生的一种运行模式

该模式不须要借助其他程序,直接输入php xx.php 就能实行php代码

命令行模式和常规web模式明显不一样的是:

没有超时时间

默认关闭buffer缓冲

STDIN和STDOUT标准输入/输出/缺点 的利用

echo var_dump,phpinfo等输出直接输出到掌握台

可利用的类/函数 不同

php.ini配置的不同

LoadModule(Apache独占)

简介:

模块模式因此mod_php5模块的形式集成,此时mod_php5模块的浸染是吸收Apache通报过来的PHP文件要求,并处理这些要求,然后将处理后的结果返回给Apache。

在Apache配置文件httpd.conf里,常日加的LoadModule php7_module “D:/…/php71/php7apache2_4.dll”起到的浸染便是这个

调用过程:

用户要求 —> Apache 做事器 —> 调用mod_php5模块处理要求 —> 返回要求结果给Apache —> Apache 返回结果给用户

ISAPI(Internet Server Application Program Interface)

简介:

在PHP5.3往后,PHP不再有ISAPI模式,安装后也不再有php5isapi.dll这个文件。
要在IIS6上利用高版本PHP,必须安装FastCGI 扩展,然后使IIS6支持FastCGI。