月光博客 » 网站建设 » IIS下PHP的ISAPI和FastCGI比较

IIS下PHP的ISAPI和FastCGI比较

  在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程序为php5isapi.dll,然后再“环境变量”-“系统变量”中增加变量名PHPRC,数值为php.ini的路径,在Internet信息服务管理器中,选择网站或应用程序的根目录,打开目录属性页(右键选择“属性”),再选择“主目录”。点击“配置”按钮,选择“映射”Tab页。点击“添加...”,在“可执行文件”设为: c:\php\php5isapi.dll,扩展名设为.php,选择“确认文件是否存在”,然后“确定”保存设置。重启服务器即可完成PHP的配置。

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

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

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

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

  cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"c:\php\php-cgi.exe"

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

  修改php.ini文件,增加如下语句:

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

  之后打开system32\inetsrv目录,执行以下语句:

  cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:10000
  cscript fcgiconfig.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的方法。

顶一下 ▲()   踩一下 ▼()

相关文章

  1. 1
    月落天涯   说道:
    IIS……不好用……
    支持(26反对(10回复
  1. 2
    飘香茶叶   说道:
    请教怎么控制php-cgi.exe进程数量,用的是iis6.0 php mysql。
    支持(26反对(15回复
  1. 3
    精神分裂   说道:
    写的很好 学习了
    支持(23反对(14回复
  1. 4
    LEE   说道:
    学习下,先...
    支持(21反对(12回复
  1. 5
    jack   说道:
    我一个日发贴1万多的论坛,FastCGI模式跑起来很快,但是有时候会出现FastCGI异常,刷新一下又不会了,后来又改回用PHP ISAPI了;
    支持(19反对(11回复
  1. 6
    valve   说道:
    太专业 看不懂
    支持(13反对(6回复
  1. 7
    神仙   说道:
    isapi的最大缺点在于不稳定,程序故障容易引起整个web服务器崩溃。


    支持(20反对(14回复
  1. 8
    蔡晓东   说道:
    抢到沙发了!
    支持(26反对(21回复
  1. 9
    沙发不是我的   说道:
    一般是可执行程序,以前用过啦
    支持(15反对(10回复
  1. 10
    飘香茶叶   说道:
    月光,发现你的GGAD只显示赛门铁克这一个网站,已经持续一段时间了。
    支持(20反对(17回复
  1. 11
    蔡晓东   说道:
    在看你和萧秋水、秋叶写的那本书,感觉浅显了一点。不过还是很有收获的。
    支持(13反对(11回复
  1. 12
    TaoGOGO   说道:
    通常我使用FastCGI的,它稳定而且速度快!
    支持(18反对(16回复
  1. 13
    waversoft   说道:
    指望fastcgi比sapi优秀多少,本身是一个误区,fastcgi的长处是稳定可靠,一旦程序挂掉不会影响iis进程,而且会立刻重新建一个新进程,而sapi则和iis一同挂起来。当然iis7下,php研发组做了许多功课,以致于fastcgi性能有较大突破。
    支持(7反对(5回复
  1. 14
    ayanamist   说道:
    我记得我看过国外的一个评测,在Windows IIS 6下,FastCGI性能并不如ISAPI,但在IIS 7下则性能优秀。
    支持(16反对(15回复
  1. 15
    updatex   说道:
    基本明白了。。。。
    支持(14反对(13回复
  1. 16
    jason   说道:
    我的IIS5.1的 不能试fastCGI
    支持(15反对(14回复
  1. 17
    yanpian   说道:
    不错,学习中性能上的差
    支持(13反对(13回复
  1. 18
    路人甲   说道:
    希望继续深入讨论trends和insight的异同
    支持(17反对(17回复
  1. 19
    Zhilong   说道:
    目前用的MT 就是Win机下的CGI
    支持(15反对(15回复
  1. 20
    dfg   说道:
    说得还可以,就是里面一些内容的放置路径说不清楚。
    如:
    修改php.ini文件,增加如下语句:

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

    这几行有没有要求放在哪里,哪个位置后面之类的。
    支持(9反对(9回复
  1. 21
    路人甲   说道:
    最近的讨论比较耐看
    支持(12反对(13回复
  1. 22
    园子   说道:
    呵 呵

    专业性比较强~
    支持(13反对(15回复
  1. 23
    been   说道:
    不好用,还是LINUX好
    支持(12反对(14回复
  1. 24
    逍遥君   说道:
    月光,发现你的GGAD只显示赛门铁克这一个网站,已经持续一段时间了。
    dev 于 2009-6-29 23:36:32 回复
    feedback
    支持(15反对(18回复
  1. 25
    dev   说道:
    php还是运行在linux比较好
    支持(15反对(18回复
  1. 26
    学习了   说道:
    前辈果然不同凡响!
    支持(13反对(16回复
  1. 27
    Jacse   说道:
    ISS缓存很郁闷。
    支持(13反对(17回复
  1. 28
    gg   说道:
    月光以前不是google的广告么,怎么换成百度推广了啊。google不能用只是暂时滴~~要坚定。。
    支持(13反对(17回复
  1. 29
    mini   说道:
    学习了,谢谢!!!!!
    支持(13反对(20回复

发表留言