青青子衿, 悠悠我心, 但为君故, 沉吟至今
« Google Trends和Google InsightsFirefox 3.5正式版发布 »

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的方法。



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/1846.html
  • 文章排行:
  • 2.飘香茶叶
  • 请教怎么控制php-cgi.exe进程数量,用的是iis6.0 php mysql。
  • 2011/9/14 17:47:25   支持(26)反对(15) 回复
  • 5.jack
  • 我一个日发贴1万多的论坛,FastCGI模式跑起来很快,但是有时候会出现FastCGI异常,刷新一下又不会了,后来又改回用PHP ISAPI了;
  • 2009/6/30 13:39:14   支持(19)反对(11) 回复
  • 7.神仙
  • isapi的最大缺点在于不稳定,程序故障容易引起整个web服务器崩溃。


  • 2009/6/30 9:45:39   支持(20)反对(14) 回复
  • 8.沙发不是我的
  • 一般是可执行程序,以前用过啦
  • 2009/6/29 23:14:07   支持(15)反对(10) 回复
  • 10.蔡晓东
  • 在看你和萧秋水、秋叶写的那本书,感觉浅显了一点。不过还是很有收获的。
  • 2009/6/29 23:02:51   支持(13)反对(11) 回复
  • 11.TaoGOGO
  • 通常我使用FastCGI的,它稳定而且速度快!
  • 2009/6/29 23:16:30   支持(18)反对(16) 回复
  • 12.飘香茶叶
  • 月光,发现你的GGAD只显示赛门铁克这一个网站,已经持续一段时间了。
  • 2009/7/3 18:02:24   支持(19)反对(17) 回复
  • 13.waversoft
  • 指望fastcgi比sapi优秀多少,本身是一个误区,fastcgi的长处是稳定可靠,一旦程序挂掉不会影响iis进程,而且会立刻重新建一个新进程,而sapi则和iis一同挂起来。当然iis7下,php研发组做了许多功课,以致于fastcgi性能有较大突破。
  • 2014/9/27 21:25:33   支持(7)反对(5) 回复
  • 14.路人甲
  • 希望继续深入讨论trends和insight的异同
  • 2009/6/29 23:24:19   支持(17)反对(16) 回复
  • 16.dfg
  • 说得还可以,就是里面一些内容的放置路径说不清楚。
    如:
    修改php.ini文件,增加如下语句:

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

    这几行有没有要求放在哪里,哪个位置后面之类的。
  • 2012/9/5 16:35:38   支持(9)反对(8) 回复
  • 18.ayanamist
  • 我记得我看过国外的一个评测,在Windows IIS 6下,FastCGI性能并不如ISAPI,但在IIS 7下则性能优秀。
  • 2009/6/30 0:58:08   支持(15)反对(15) 回复
  • 26.逍遥君
  • 月光,发现你的GGAD只显示赛门铁克这一个网站,已经持续一段时间了。
    dev 于 2009-6-29 23:36:32 回复
    feedback
  • 2009/6/29 23:26:22   支持(14)反对(18) 回复
  • 28.gg
  • 月光以前不是google的广告么,怎么换成百度推广了啊。google不能用只是暂时滴~~要坚定。。
  • 2009/6/30 12:31:43   支持(13)反对(17) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.