<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JavaWo &#187; IIS</title>
	<atom:link href="http://www.javawo.com/tag/iis/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.javawo.com</link>
	<description>JavaWo关注互联网前沿的Blog.</description>
	<lastBuildDate>Thu, 13 May 2010 12:03:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IIS下PHP的ISAPI和FastCGI性能比较</title>
		<link>http://www.javawo.com/php-isapi-vs-fastcgi-on-iis/</link>
		<comments>http://www.javawo.com/php-isapi-vs-fastcgi-on-iis/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 14:37:18 +0000</pubDate>
		<dc:creator>JavaWo</dc:creator>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[ISAPI]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.javawo.com/?p=176</guid>
		<description><![CDATA[在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页。点击“添加&#8230;”，在“可执行文件”设为: 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页。点击“添加&#8230;”，在“可执行文件”设为: 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的方法。
]]></description>
			<content:encoded><![CDATA[<p>在Windows IIS 6.0下配置PHP，通常有CGI、ISAPI和FastCGI三种配置方式，这三种模式都可以在IIS 6.0下成功运行，下面我就讲一下这三种方式配置的区别和性能上的差异。</p>
<p>　　1、CGI（通用网关接口/Common Gateway Interface）一般是可执行程序，例如EXE文件，和WEB服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求。这样，当用户请求数量非常多时，会大量占用系统的资源，如内存、CPU时间等，造成效能低下。</p>
<p>　　2、ISAPI（Internet Server Application Program Interface）是微软提供的一套面向WEB服务的API接口，它能实现CGI提供的全部功能，并在此基础上进行了扩展，如提供了过滤器应用程序接口。ISAPI应用大多数以DLL动态库的形式使用，可以在被用户请求后执行，，在处理完一个用户请求后不会马上消失，而是继续驻留在内存中等待处理别的用户输入。此外,ISAPI的DLL应用程序和WEB服务器处于同一个进程中，效率要显著高于CGI。</p>
<p>　　在Windows Server 2003的IIS6下配置ISAPI方式的PHP，配置方法是，在IIS的“WEB服务扩展”中，添加一个新的WEB服务扩展，程序后缀为PHP，ISAPI程序为php5isapi.dll，然后再“环境变量”-“系统变量”中增加变量名PHPRC，数值为php.ini的路径，在Internet信息服务管理器中，选择网站或应用程序的根目录，打开目录属性页（右键选择“属性”），再选择“主目录”。点击“配置”按钮，选择“映射”Tab页。点击“添加&#8230;”，在“可执行文件”设为: c:\php\php5isapi.dll，扩展名设为.php，选择“确认文件是否存在”，然后“确定”保存设置。重启服务器即可完成PHP的配置。</p>
<p>　　3、FastCGI是可伸缩架构的CGI开放扩展，其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。传统的CGI解释器的反复加载是CGI性能低下的主要原因，如果CGI解释器保持在内存中并接受FastCGI进程管理器调度，则可以提供良好的性能、伸缩性等。</p>
<p>FastCGI已经集成于IIS7，也支持IIS6，在IIS6中的安装方法可参见<a href="http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/" target="_blank">微软的官方文档</a>，我这里简单翻译一下。</p>
<p>　　先<a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;g=6&amp;i=1521" target="_blank">点这里</a>下载一个32位的FastCGI extension for IIS，然后将其安装，安装后的文件应该放到system32\inetsrv目录下。</p>
<p>　　之后打开system32\inetsrv目录，执行下面的语句，其中c:\php为你的PHP目录，可以修改为其他数值。</p>
<p>　　<code>cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"c:\php\php-cgi.exe"</code></p>
<p>　　在Internet信息服务管理器中，选择网站或应用程序的根目录，打开目录属性页（右键选择“属性”），再选择“主目录”。点击“配置”按钮，选择“映射”Tab页。点击“添加&#8230;”，在“可执行文件”设为: c:\windows\system32\inetsrv\fcgiext.dll，扩展名设为.php，选择“确认文件是否存在”，然后“确定”保存设置。</p>
<p>　　修改php.ini文件，增加如下语句：<br />
<code><br />
　　fastcgi.impersonate = 1<br />
　　cgi.fix_pathinfo = 1<br />
　　cgi.force_redirect = 0<br />
</code><br />
　　之后打开system32\inetsrv目录，执行以下语句：<br />
<code><br />
　　cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:10000<br />
　　cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000<br />
</code></p>
<p>　　最后，配置c:\php目录的安全性，使得IIS_WPG组对于这个目录有读取和执行的权限。</p>
<p>　　这时候，基于FastCGI的PHP就成功配置到IIS6上了。</p>
<p>　　不过根据我自己的测试，FastCGI的性能比ISAPI的好像高不了多少，不知道Windows Server 2008下的IIS7是不是会好一些。<a href="http://learn.iis.net/page.aspx/375/setting-up-fastcgi-for-php/" target="_blank">这里</a>是微软提供的基于内置FastCGI的IIS7安装PHP的方法。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javawo.com/php-isapi-vs-fastcgi-on-iis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
