zoukankan      html  css  js  c++  java
  • PHP运行模式

    PHP运行模式有哪几种?
    PHP运行模式其实是有五种的,不过对于目前来说,用得最多的就只有四种了,五种PHP运行模式分别是CGI、FastCGI、CLI、Web模块、ISAPI模式。

    下面给大家详细的讲解一下这五种PHP运行模式吧!

    一、CGI
    全称是“通用网关接口”(Common Gateway Interface), 它可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据,描述的是客户端和这个程序之间传输数据的一种标准,另外CGI独立于任何语言,所以可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。

    CGI针对每个用户请求都要开单独的子进程去维护,所以数量多的时候会出现性能问题,最近几年很少用。

    二、FastCGI
    它是CGI的升级版本,FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。

    PHP使用PHP-FPM(FastCGI Process Manager),全称PHP FastCGI进程管理器进行管理。

    FastCGI工作原理

    Web Server启动时载入FastCGI进程管理器;
    FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待来自Web Server的连接;
    当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
    FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器的下一个连接。
    在正常的CGI模式中,这就结束了,下次还要重新来过。但是在FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。

    三、Cli
    PHP-CLI是PHP Command Line Interface的简称,就是PHP在命令行运行的接口,区别于在Web服务器上运行的PHP环境(PHP-CGI等)。

    我们在Linux下经常使用”php –m”查找PHP安装了那些扩展就是PHP命令行运行模式。 你可以直接输入“php -h”来看看具体都有什么命令。

    php -m

    在php-cli模式下我们可以直接启动一个php文件并执行:

    [root@localhost ~]# php index.php start
    要说明的是,php-cli模式并没有php运行超时的说法。

    四、ISAPI
    ISAPI(Internet Server Application Program Interface)是微软提供的一套面向Internet服务的API接口,一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。(由于微软的排他性,只能运行于windows环境)

    PHP作为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。

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

    五、Module加载
    一般是针对apache而言的,这种方式,他们的共同本质都是用 LoadModule 来加载 phpX_module,就是把php作为apache的一个子模块来运行。

    当通过web访问php文件时,apache就会调用phpX_module来解析php代码,那么phpX_module是怎么来将数据传给php解析器来解析php代码的呢?答案是通过sapi。

    什么是sapi?答案是:SAPI提供了一个和外部通信的接口,常见的SAPI有:cgi、fast-cgi、cli、apache模块的DLL、isapi;

    所以,以上的apache调用php执行的过程如下:

    apache -> httpd -> php5_module -> sapi -> php

    apache每接收一个请求,都会产生一个进程来连接php通过sapi来完成请求,可想而知,如果一旦用户过多,并发数过多,服务器就会承受不住了。

    而且,把mod_php编进apache时,出问题时很难定位是php的问题还是apache的问题。

    转载自: https://www.fujieace.com/php/modes.html

  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯VIP基础练习 矩形面积交
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    核心思想:想清楚自己创业的目的(如果你没有自信提供一种更好的产品或服务,那就别做了,比如IM 电商 搜索)
    在Linux中如何利用backtrace信息解决问题
  • 原文地址:https://www.cnblogs.com/smilem/p/13194151.html
Copyright © 2011-2022 走看看