IIS下PHP的CGI,ISAPI,FastCGI比较

来自php
-under-iis-for-cgi-isapi-fastcgi
-compare/">博吧

在Windows IIS 6.0下配置
PHP,通常有CGI、ISAPI和FastCGI三种配置
方式
,这三种模式
都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式
配置
区别
和性能上的差异。

  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。

  在Windows Server 2003的IIS6下配置
ISAPI方式
的PHP,配置
方法
是,在IIS的“WEB服务扩展
”中,添加一个新的WEB服务扩展
程序
后缀
为PHP,ISAPI程序
php
5isapi.dl
l,然后再“环境变量
”-“系统
变量
”中增加变量
名PHPRC,数值
php
.ini的路径
,在Internet信息
服务管理器中,选择
网站
或应用程序
的根目录
,打开目录
属性
页(右键选择
属性
”),再选择
“主目录
”。点击“配置
按钮
选择
“映射”Tab页。点击“添加...”,在“可执行文件
”设为: c:\php
\php
5isapi.dl
l,扩展
名" title="扩展
名" >扩展
名设为.php
选择
“确认文件
是否存在”,然后“确定”保存设置
。重启服务器
即可完成PHP的配置

  3、FastCGI是可伸缩架构的CGI开放扩展
,其主要行为是将CGI解释器进程
保持在内存中并因此获得
较高的性能。传统的CGI解释器的反复加载
是CGI性能低下的主要原因
,如果CGI解释器保持在内存中并接受FastCGI进程
管理器调度,则可以提供良好的性能、伸缩性等。

  FastCGI已经集成于IIS7,也支持
IIS6,在IIS6中的安装
方法
可参见微软
的官方文档
,我这里简单翻译一下。

  先点这里下载
一个32位的FastCGI extension
for IIS,然后将其安装
安装
后的文件
应该
放到system32\inetsrv目录
下。

  之后打开system32\inetsrv目录
,执行下面的
句" title="
句" >
句,其中c:\php
为你的PHP目录
,可以修改为其他数值

  cscrip
t fcgiconf
ig.js
-add -section:"PHP" -extension
:php
-path:"c:\php
\php
-cgi.exe
"

  在Internet信息
服务管理器中,选择
网站
或应用程序
的根目录
,打开目录
属性
页(右键选择
属性
”),再选择
“主目录
”。点击“配置
按钮
选择
“映射”Tab页。点击“添加...”,在“可执行文件
”设为: c:\windows\system32\inetsrv\fcgie
xt.dl
l,扩展
名" title="扩展
名" >扩展
名设为.php
选择
“确认文件
是否存在”,然后“确定”保存设置

  修改php
.ini文件
,增加如下
句" title="
句" >
句:

  fastcgi
.impersonate = 1
  cgi.fix_pathinfo = 1
  cgi.force_redirect = 0

  之后打开system32\inetsrv目录
,执行以下
句" title="
句" >
句:

  cscrip
t fcgiconf
ig.js
-set -section:"PHP" -InstanceMaxRequests:10000
  cscrip
t fcgiconf
ig.js
-set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000

  最后,配置
c:\php
目录
安全
性,使得IIS_WPG组对于这个目录
有读取和执行的权限

  这时候,基于FastCGI的PHP就成功配置
到IIS6上了。

  不过根据我自己的测试,FastCGI的性能比ISAPI的好像高不了
少,不知道Windows Server 2008下的IIS7是不是
会好一些。这里是微软
提供的基于内置FastCGI的IIS7安装
PHP的方法