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 相关文章推荐
Ajax PHP分页演示
Jan 02 PHP
PHP 命令行参数详解及应用
May 18 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
php使浏览器直接下载pdf文件的方法
Nov 15 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
Jun 12 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十四)
Jun 26 PHP
PHP实现文件下载【实例分享】
Apr 28 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
php实现QQ小程序发送模板消息功能
Sep 18 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
Feb 18 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定义参数数量可变的函数用法实例
2015/03/16 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
PHP类型约束用法示例
2016/09/28 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
神奇的7个jQuery 3D插件整理
2011/01/06 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
2017/01/19 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
2017/06/15 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
js操作table中tr的顺序实现上移下移一行的效果
2018/11/22 Javascript
vue中利用Promise封装jsonp并调取数据
2019/06/18 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
Python群发邮件实例代码
2014/01/03 Python
Python魔术方法详解
2015/02/14 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
python中hashlib模块用法示例
2017/10/30 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
Python 网络爬虫--关于简单的模拟登录实例讲解
2018/06/01 Python
Python快速查找list中相同部分的方法
2018/06/27 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python RabbitMQ 使用详细介绍(小结)
2018/11/08 Python
Python基于Socket实现简单聊天室
2020/02/17 Python
MADE法国:提供原创设计师家具
2018/09/18 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
《草虫的村落》教学反思
2014/02/16 职场文书
《小白兔和小灰兔》教学反思
2014/02/18 职场文书
数学系毕业生求职信
2014/05/29 职场文书
开工典礼致辞
2015/07/29 职场文书