IIS下PHP的三种配置方式对比


Posted in PHP onNovember 20, 2014

 在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上了。

PHP 相关文章推荐
基于mysql的论坛(6)
Oct 09 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
认识并使用PHP超级全局变量
Jan 26 PHP
用来解析.htgroup文件的PHP类
Sep 05 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
PHP中mysqli_affected_rows作用行数返回值分析
Dec 26 PHP
php有效防止同一用户多次登录
Nov 19 PHP
基于Swoole实现PHP与websocket聊天室
Aug 03 PHP
Fleaphp常见函数功能与用法示例
Nov 15 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 #PHP
php目录遍历函数opendir用法实例
Nov 20 #PHP
php中base_convert()进制数字转换函数实例
Nov 20 #PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
Nov 20 #PHP
PDO预处理语句PDOStatement对象使用总结
Nov 20 #PHP
php中ob_get_length缓冲与获取缓冲长度实例
Nov 20 #PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 #PHP
You might like
第二节 对象模型 [2]
2006/10/09 PHP
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
PHP防止注入攻击实例分析
2014/11/03 PHP
php读取flash文件高宽帧数背景颜色的方法
2015/01/06 PHP
浅谈PHP各环境下的伪静态配置
2019/03/13 PHP
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
JS制作图形验证码实现代码
2020/10/19 Javascript
基于JS设计12306登录页面
2016/12/28 Javascript
Javascript Function.prototype.bind详细分析
2016/12/29 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
jquery ajax异步提交表单数据的方法
2017/10/27 jQuery
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
2018/09/29 Javascript
简单文件操作python 修改文件指定行的方法
2013/05/15 Python
Python的设计模式编程入门指南
2015/04/02 Python
python中函数默认值使用注意点详解
2016/06/01 Python
python elasticsearch环境搭建详解
2019/09/02 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
美国知名的隐形眼镜电商:Contacts America
2019/11/19 全球购物
大学生年度自我鉴定
2013/10/31 职场文书
公司董事长职责
2013/12/12 职场文书
运动会通讯稿100字
2014/01/31 职场文书
卖车协议书
2014/04/21 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python