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中对数据库操作的封装
Oct 09 PHP
第二节--PHP5 的对象模型
Nov 16 PHP
有关 PHP 和 MySQL 时区的一点总结
Mar 26 PHP
php 日期时间处理函数小结
Dec 18 PHP
PHP面向对象概念
Nov 06 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
php+mysqli预处理技术实现添加、修改及删除多条数据的方法
Jan 30 PHP
php编程中echo用逗号和用点号连接的区别
Mar 26 PHP
php编程实现简单的网页版计算器功能示例
Apr 26 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
php中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
Web程序工作原理详解
2014/12/25 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
基于jQuery实现点击同时更改两个iframe的网址
2010/07/01 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
javascript编写贪吃蛇游戏
2015/07/07 Javascript
jQuery获取某天的农历日期并判断是否除夕或新年的方法
2016/03/01 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
jQuery操作cookie
2016/08/08 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
微信小程序 Page()函数详解
2016/10/17 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
Python中input与raw_input 之间的比较
2017/08/20 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
Django模板语言 Tags使用详解
2019/09/09 Python
Python datetime 如何处理时区信息
2020/09/02 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
毕业生的自我鉴定
2013/10/29 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
新教师岗前培训方案
2014/06/05 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
党员批评与自我批评发言
2014/10/02 职场文书
中学生旷课检讨书2篇
2014/10/09 职场文书
党的群众路线教育实践活动心得体会(医院)
2014/11/03 职场文书
校本课程教学计划
2015/01/19 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python