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 SPL标准库的用法(遍历目录,查找固定条件的文件)
Jun 18 PHP
php使用imagick模块实现图片缩放、裁剪、压缩示例
Apr 17 PHP
php生成html文件方法总结
Dec 01 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
Apr 08 PHP
Zend Framework教程之MVC框架的Controller用法分析
Mar 07 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
PHP 文件上传后端处理实用技巧方法
Jan 06 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
关于php 高并发解决的一点思路
Apr 16 PHP
Laravel框架表单验证操作实例分析
Sep 30 PHP
解决laravel(5.5)访问public报错的问题
Oct 12 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 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
UCenter中的一个可逆加密函数authcode函数代码
2010/07/20 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
PHP支付宝当面付2.0代码
2018/12/21 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
AngularJS动态绑定HTML的方法分析
2016/11/07 Javascript
jquery实现点击a链接,跳转之后,该a链接处显示背景色的方法
2018/01/18 jQuery
vue实现淘宝购物车功能
2020/04/20 Javascript
在Echarts图中给坐标轴加一个标识线markLine
2020/07/20 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
Python 实现自动获取种子磁力链接方式
2020/01/16 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
python3 logging日志封装实例
2020/04/08 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
python实现移动木板小游戏
2020/10/09 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
基于html5 canvas做批改作业的小插件
2020/05/20 HTML / CSS
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
优秀教师工作感言
2014/02/16 职场文书
文艺晚会主持词
2014/03/24 职场文书
制冷与空调专业毕业生推荐信
2014/07/07 职场文书
倡议书的格式写法
2015/04/28 职场文书
简历自我评价范文
2019/04/24 职场文书
您对思维方式了解多少?
2019/12/09 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
利用JavaScript写一个简单计算器
2021/11/27 Javascript