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 中的某些设置,因为这些设置在外壳环境下是没有意义的。

转载于:https://www.cnblogs.com/huangye-dream/p/3560722.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

辨析*P++,*(p++),*(++p),++(*p),*(P--),*(--P)

1,*p由于和*同等优先级,结合方向为自右向左,因此它等价与*(p)。先引用p的值,实现*p的运算,然后再使p自增1。注意 其中为什么是先执行*p然后再执行*p,不应该是先执行括号里的p再执行*…

chrome密码管理

chrome://settings/passwords ------------------------------- [系统盘]:\Documents and Settings\[用户名]\Local Settings\Application Data\Google\Chrome\User Data\Default\Login Data (这个路径是 Win XP 系统) 你可以用 SQLite Database Browse…

牛客网刷题错题记录

目录 Java 1.静态内部类 2.关于String,StringBuilder以及StringBuffer 3.java语言特性 4.非抽象类实现接口的问题 5.互斥锁 6. Socket 通信编程 7.类的初始化顺序 8.变量的存储区 9.jvm线程共享问题 10.java内存回收问题 11.关于java concurrent包四个类…

android Intent和IntentFilter

android的应用程序包含三种重要的组件:Activity、Service、BroadcastReceiver,应用程序采用一致的方式来启动他们——都是依靠Intent来进行启动。Intent就封装了程序想要启动的程序意图,不仅如此,Intent还可用于与被启动组件交换信…

冒泡排序的双重循环理解

主要说一下冒泡排序的一些关键地方的个人理解,比如算法思想,两个循环的作用意义,中间循环变量范围的确定等。 原理:比较两个相邻的元素,将值大的元素交换至右端。思路:依次比较相邻的两个数,将小…

全程软件测试之测试需求分析与计划(2)

2.3 测试工作量估算 在确定了测试需求、明确了测试范围之后,就需要明确测试任务,估算测试工作量。基于质量需求和测试的工作量、测试环境、产品发布的设想时间等要求,就可以确定测试进度和所需的测试资源,或者基于现有的测试资源…

C语言和Java 在用数组作为参数时有点不一样

C语言和Java 在用数组作为参数时有点不一样。 C中 void jh(int n[2]) {/注意这里参数是写了大小 int temp; temp n[0]; n[0] n[1]; n[1] temp; } int main() { int i; int num[2] {7, 8}; jh(num); } Java中 由于C和Java中定义数组形式稍微有点不一样,所以这里…

[CLR via C#]16. 数组

数组是允许将多个数据项当作一个集合来处理的机制。CLR支持一维数组、多维数组和交错数据(即由数组构成的数组)。所有数组类型都隐式地从System.Array抽象类派生,后者又派生自System.Object。这意味着数组始终是引用类型,是在托管堆上分配的。在你应用程…

Java中String类 compareTo()方法比较字符串详解

中心:String 是字符串,它的比较用compareTo方法,它从第一位开始比较, 如果遇到不同的字符,则马上返回这两个字符的ascii值差值.返回值是int类型1.当两个比较的字符串是英文且长度不等时,1)长度短的与长度长的字符一样,则返回的结果…

UIPopoverController简介

1, performSegueWithIdentifier:sender:跳转或弹出控制器 Identifier为popoverSegue时候,Sender仅限于UIBarbuttonItem与View;//。。。。。。。。。 转载于:https://www.cnblogs.com/senlinwuran/p/UIPopoverController.html

异常是catch还是throws的简单原则

1 .如果你完全能处理这个异常,那么就catch掉 public void test() {try {} catch (Exception e) {}}2. 如果你完全不能处理这个异常,那么就throws掉 public void test() throws Exception {}3. 如果你想对异常做一点点处理,但又不能完全处理&a…

在Windows 7 x64 上编译libsvn

这几天由于工作需要,需要Windows上Python 2.7 x64对应的svn模块。Win32版本可以从这个页面直接下载 http://sourceforge.net/projects/win32svnx64的无奈只有自己编译了。在这个过程中还是费了一些力气,在Linux上可以直接make,在Windows使用V…

程序员简历怎么写

说到程序员简历,这两个月,我看过不下10,000份简历。。。 答主不是HR,也不是技术负责人,但是在网站的运营工作中,每天最开心的事情就是研究候选人的简历了~~ 这些人中,有BAT的资深大牛程序员,也有…

android之修改CheckBox左侧图标样式

很多时候系统自带的CheckBox样式并不能满足我们的需求,本文讲解如何替换CheckBox选中,未选中状态下的左侧图片背景的替换。 1.在res目录下创建drawable文件夹,在drawable创建my_checkbox.xml文件 my_checkbox.xml文件内容如下: &l…

步步高DVD机DV603的U盘模式支持视频格式

亲测支持视频格式:支持avi,mpg,vob文件 转载于:https://www.cnblogs.com/phyking/p/4456602.html

SSM框架学习整理

一、Spring原理: 1:核心技术 Spring的两大技术要点便是,一个AOP(面向切面编程),一个IOC(控制反转),而AOP是什么呢,就好比从c语言面向过程编程—>java面向对象编程—>Spring面向切面编程…

安卓手机关闭底部键盘灯的方法(htc G11亲测有效)

还在因为看电子书和看电影时键盘灯刺眼而苦恼吗?下面提供一个方法关闭键盘灯,让你轻松DIY!1、手机必须先Root。使用RE管理器,按照这个路径,找到文件:brightnesssys/devices/platform/leds-pm8058/leds/butt…

SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)

使用SSM(Spring、SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方。之前没有记录SSM整合的过程,这次刚刚好基于自…

java基础知识 多线程

package org.base.practise9; import org.junit.Test; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; /** * Created with IntelliJ IDEA. * User: cutter.li * Date: 14-3-11 * Time: 上午9:40 * 多线程基础知识练习 */ public class Pract…

最新版的SSM框架spring5.0搭建教程(附源码)

<p>用SSM框架已经有一段时间了&#xff0c;但都没有完整地搭建过一次工程。前段时间比较有时间就自己试着搭建了一下&#xff0c;差不多都是用的最新的spring版本了&#xff0c;然后就在这个基础上做了很多的实验测试。最近想着还是记录一下整个搭建的过程&#xff0c;以…