`
waret
  • 浏览: 139392 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论
阅读更多

IIS下PHP的ISAPI和FastCGI比较

    1、CGI(通用网关接口/Common Gateway Interface)一般是可执行程序,例如EXE文件,和WEB服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求。这样,当用户请求数量非常多时,会大量占用系统的资源,如内存、CPU时间等,造成效能低下。
    2、ISAPI(Internet Server Application Program Interface)是微软提供的一套面向WEB服务的API接口,它能实现CGI提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。ISAPI应用大多数以DLL动态库的形式使用,可以在被用户请求后执行,,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用户输入。此外,ISAPI的DLL应用程序和WEB服务器处于同一个进程中,效率要显著高于CGI。
    3、FastCGI是可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。传统的CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性等。

以 ISAPI 模式运行 PHP 的,这种方式最大的缺点就是稳定性不好,当 PHP 出错的时候,Apache进程也死掉。

FastCGI 模式运行 PHP 的优点:
首先就是 PHP 出错的时候不会搞垮 Apache,只是 PHP 自己的进程当掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。
其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好
最后,就是可以同时运行 PHP5 和 PHP4

FastCGI 模式的一些缺点:
用 FastCGI 模式更适合生产环境的服务器,但对于开发用机器来说就不太合适。因为当使用 Zend Studio 调试程序时,由于 FastCGI 会认为 PHP 进程超时,从而在页面返回 500 错误。


    从版本 4.3.0 开始,PHP 提供了一种新类型的 SAPI(Server Application Programming Interface,服务端应用编程端口)支持,名为 CLI,意为 Command Line Interface,即命令行接口。顾名思义,该 SAPI 模块主要用作 PHP 的开发外壳应用。CLI SAPI 和其它 SAPI 模块相比有很多的不同之处。值得一提的是,CLI 和 CGI 是不同的 SAPI,尽管它们之间有很多共同的行为。
    CLI SAPI 最先是随 PHP 4.2.0 版本发布的,但仍旧只是一个实验性的版本,并需要在运行 ./configure 时加上 –enable-cli 参数。从 PHP 4.3.0 版本开始,CLI SAPI 成为了正式模块,–enable-cli 参数会被默认得设置为 on,也可以用参数 –disable-cli 来屏蔽。
    从 PHP 4.3.0开始,CLI/CGI 二进制执行文件的文件名、位置和是否存在会根据 PHP 在系统上的安装而不同。在默认情况下,当运行 make 时,CGI 和 CLI 都会被编译并且分别放置在 PHP 源文件目录的 sapi/cgi/php 和 sapi/cli/php 下。可以注意到两个文件都被命名为了 php。在 make install 的过程中会发生什么取决于配置行。如果在配置的时候选择了一个 SAPI 模块,如 apxs,或者使用了 –disable-cgi 参数,则在 make install 的过程中,CLI 将被拷贝到 {PREFIX}/bin/php,除非 CGI 已经被放置在了那个位置。因此,例如,如果在配置行中有 –with–apxs,则在 make install 的过程中,CLI 将被拷贝到 {PREFIX}/bin/php。如果希望撤销 CGI 执行文件的安装,请在 make install 之后运行 make install-cli。或者,也可以在配置行中加上 –disable-cgi 参数。
    以下为 CLI SAPI 和其它 SAPI 模块相比的显著区别:
    * 与 CGI SAPI 不同,其输出没有任何头信息。尽管 CGI SAPI 提供了取消 HTTP 头信息的方法,但在 CLI SAPI 中并不存在类似的方法以开启 HTTP 头信息的输出。CLI 默认以安静模式开始,但为了保证兼容性,-q 和 –no-header 参数为了向后兼容仍然保留,使得可以使用旧的 CGI 脚本。在运行时,不会把工作目录改为脚本的当前目录(可以使用 -C 和 –no-chdir 参数来兼容 CGI 模式)。出错时输出纯文本的错误信息(非 HTML 格式)。
    * CLI SAPI 强制覆盖了 php.ini 中的某些设置,因为这些设置在外壳环境下是没有意义的。

分享到:
评论

相关推荐

    php-cli_for_uos20ordebian.zip

    2. `php7.3-cgi_7.3.19-1_deb10u1_arm64.deb`:PHP-CGI 是一种通用网关接口(CGI)实现,允许 PHP 与 Web 服务器交互,提供动态内容。 3. `php7.3-common_7.3.19-1_deb10u1_arm64.deb`:包含了 PHP 7.3 的公共库和...

    php cli模式学习(PHP命令行模式)|angluo-php-95936.pdf

    不同于通常在Web服务器上运行的PHP环境(如php-cgi、isapi等),PHP CLI模式可以看作是PHP的一个独立运行模式,这让PHP的功能不再局限于开发网页。 1. PHP CLI模式简介: - PHP CLI是一个命令行界面,它允许用户...

    php-cli简介(不会Shell语言一样用Shell)

    PHP CLI提供了与Web服务器上运行的PHP环境(如PHP-CGI或ISAPI)不同的执行模式,更适合于命令行任务。 **执行PHP CLI脚本** - **PHP CLI语法**:PHP CLI的语法与普通的PHP语法一致。主要的区别在于一些默认设置,...

    PHP笔记(1)1

    管理器则调度已存在的CGI解释器(如PHP-cgi)进程来处理请求,处理完成后继续等待新的请求,而不需要频繁地创建和销毁进程。这种方式极大地提高了效率和响应速度。 **PHP-FPM** PHP-FPM(FastCGI Process Manager...

    用PHP写SHELL 教程

    CLI 版本的解释器文件名为 `php.exe`(Windows 平台上),而 CGI 版本的解释器文件名为 `php-cgi.exe`。 #### 20.3 PHP 命令行接口 (CLI) 对于使用 UNIX 系统的开发者来说,要运行 CLI 版本的 PHP,需要在编译 PHP...

    php-8.1.4-Win32-vs16-x64

    4. **php-cgi.exe**:这是PHP的CGI(通用网关接口)版本,用于在Web服务器下运行PHP脚本,通过CGI协议与服务器交互。 5. **deplister.exe**:可能是一个辅助工具,用于处理PHP扩展的依赖关系,帮助部署和管理PHP...

    php-cli

    5. **PHP命令行工具**:PHP CLI附带了一系列内置工具,如`phpize`用于扩展编译,`php-config`用于获取配置信息,`php-cgi`用于CGI环境等。 **PHP CLI的使用场景** 1. **命令行应用程序**:编写能够直接在终端运行...

    php的4种常见运行方式_.docx

    本文将详细介绍PHP的四种常见运行方式:CGI、FastCGI、APACHE2HANDLER和CLI。 1. CGI(Common Gateway Interface) CGI是一种标准,允许Web服务器与外部程序交互,例如PHP脚本。当一个用户请求PHP页面时,Web服务器...

    Ubuntu crontab 定时执行php脚本文件

    - **确认PHP5-CLI模块已安装**:确保系统中已经安装了`php5-cli`模块,该模块提供了PHP的命令行接口。可以通过运行命令`apt-get install php5-cli`来安装。 - **编辑PHP脚本文件**:在PHP脚本文件的第一行加上`#!/...

    php-master_php源码_

    4. ` sapi`:Server Application Programming Interface,提供了与不同服务器接口交互的模块,如CLI(命令行)、CGI、Apache模块等。 5. `lib`目录:包含了PHP的库文件,如字符串处理、数组操作等。 通过阅读和理解...

    phpinfo_feathersllf_zip_php_

    5. CGI/CLI信息:如果PHP是作为CGI或命令行接口运行,会显示相关的信息。 6. Zend扩展:如果使用了Zend引擎,会显示其相关信息。 7. PHP编译参数:如何编译PHP的详细信息。 `feathersllf`可能是创建或打包这个...

    深入理解php底层:php生命周期 - guisu,程序人生。 逆水行舟,不进则退。 - 博客频道 - CSDN.NET1

    对于CGI或CLI,请求处理立即开始且仅发生一次。而在Apache、IIS等Web服务器中,每次用户请求页面时都会触发这一过程,可能并发进行多次。在请求处理初始化阶段,ZE创建脚本的运行环境,并调用每个扩展的请求初始化...

    php-5.6.14-Win32-VC11-x64.zip

    5. **php-cgi.exe**:这是PHP的CGI(通用网关接口)版本,用于在Web服务器上运行PHP脚本,通过HTTP协议处理客户端请求。 6. **deplister.exe**:可能是一个辅助工具,用于列出压缩包内文件的详细信息,帮助用户了解...

    php.ini-development

    CGI/FastCGI. ; http://php.net/ini.sections ; Directives are specified using the following syntax: ; directive = value ; Directive names are *case sensitive* - foo=bar is different from FOO=bar. ; ...

    PHP程序执行的过程原理

    SAPI 是一个统称,包括 ISAPI、CLI SAPI、CGI 等,它使得 PHP 可以与其他服务器交互,如 Apache、IIS、CGI 等。在 Apache 环境中,我们需要编译 PHP 并生成一个 mod_php5.so 模块。Apache 加载这个模块,然后将其...

    谈谈你对Zend SAPIs(Zend SAPI Internals)的理解

    在PHP 5.2版本中,默认支持多种SAPI,包括mod_php5、CGI、ISAPI(用于IIS)以及CLI等。本文主要关注的是最简单的CGI SAPI,因为它虽然简单,但足以揭示SAPI的基本工作原理。 CGI(Common Gateway Interface)SAPI是...

    ubuntu nginx+PHP+mysql服务器搭建.pdf

    sudo apt-get install php5-cli php5-cgi mysql-server php5-mysql ``` 这将同时安装PHP解释器、PHP-CGI(用于处理CGI请求)和MySQL数据库服务器,以及PHP与MySQL的连接扩展。 为了支持PHP脚本,我们需要安装...

    全功能PHP代码全功能PHP代码全功能PHP代码

    10. **CGI和CLI模式**:在`cgi-bin`目录中,可能包含运行在CGI(通用网关接口)环境下的PHP脚本,用于接收和响应HTTP请求。另外,PHP还可以通过命令行接口(CLI)运行,如`hello-arm`可能是一个在ARM架构上运行的CLI...

    ubuntunginx+PHP+mysql服务器搭建.pdf

    sudo apt-get install php5-cli php5-cgi mysql-server php5-mysql ``` 安装完PHP后,我们还需要安装FastCGI,它是Nginx与PHP交互的重要组件: ```bash sudo apt-get install spawn-fcgi ``` 配置Nginx以支持PHP...

Global site tag (gtag.js) - Google Analytics