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 全文搜索和替换的实现代码
Jul 29 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
2个Codeigniter文件批量上传控制器写法例子
Jul 25 PHP
PHP实现下载断点续传的方法
Nov 12 PHP
php中数字、字符与对象判断函数用法实例
Nov 26 PHP
PHP实用函数分享之去除多余的0
Feb 06 PHP
PHP实现连接设备、通讯和发送命令的方法
Oct 13 PHP
PHP可变变量学习小结
Nov 29 PHP
php自定义分页类完整实例
Dec 25 PHP
PHP获取页面执行时间的方法(推荐)
Dec 10 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PHP加MySQL消息队列深入理解
Feb 27 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
十个PHP高级应用技巧果断收藏
2015/09/25 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
2019/10/08 PHP
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
javascript中setAttribute()函数使用方法及兼容性
2015/07/19 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
Angularjs中使用layDate日期控件示例
2017/01/11 Javascript
微信小程序 页面之间传参实例详解
2017/01/13 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
Vue ElementUI实现:限制输入框只能输入正整数的问题
2020/07/31 Javascript
[01:11:15]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现requests发送/上传多个文件的示例
2018/06/04 Python
python实现求特征选择的信息增益
2018/12/18 Python
python爬虫之自制英汉字典
2019/06/24 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
Python TCPServer 多线程多客户端通信的实现
2019/12/31 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
python编写扎金花小程序的实例代码
2021/02/23 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的代码
2020/11/30 HTML / CSS
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
三项教育活动实施方案
2014/03/30 职场文书
2014年司法局工作总结
2014/12/11 职场文书
物业保安辞职信
2015/05/12 职场文书
小学英语课教学反思
2016/02/15 职场文书
创业计划书之暑假培训班
2019/11/09 职场文书