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 相关文章推荐
PHP 学习路线与时间表
Feb 21 PHP
探讨如何把session存入数据库
Jun 07 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
php异常处理方法实例汇总
Jun 24 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
Aug 31 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
利用php输出不同的心形图案
Apr 22 PHP
php 修改上传文件大小限制实例详解
Oct 23 PHP
php根据年月获取当月天数及日期数组的方法
Nov 30 PHP
PHP+JavaScript实现无刷新上传图片
Feb 21 PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 PHP
php连接mysql数据库最简单的实现方法
Sep 24 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
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
2014/07/28 PHP
php封装一个异常的处理类
2017/06/08 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
开发Node CLI构建微信小程序脚手架的示例
2020/03/27 Javascript
vue 出现data-v-xxx的原因及解决
2020/08/04 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
使用Python生成url短链接的方法
2015/05/04 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
python利用MethodType绑定方法到类示例代码
2017/08/27 Python
python 文件操作删除某行的实例
2017/09/04 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
Python 实现自动导入缺失的库
2019/10/29 Python
Python随机数函数代码实例解析
2020/02/09 Python
python属于解释型语言么
2020/06/15 Python
Python修改DBF文件指定列
2020/12/19 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
统计每一学生的平均成绩
2014/06/06 面试题
红旗团支部事迹材料
2014/01/27 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
《莫泊桑拜师》教学反思
2014/04/23 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
对象析构函数__del__在Python中何时使用
2022/03/22 Python
Win11查看设备管理器
2022/04/19 数码科技