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 相关文章推荐
回答PHPCHINA上的几个问题:URL映射
Feb 14 PHP
php通用防注入程序 推荐
Feb 26 PHP
php 文件缓存函数
Oct 08 PHP
php使HTML标签自动补全闭合函数代码
Oct 04 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
Yii框架自定义数据库操作组件示例
Nov 11 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
用Flash图形化数据(一)
2006/10/09 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
PHP实现网页内容html标签补全和过滤的方法小结【2种方法】
2017/04/27 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
jquery 学习之二 属性相关
2010/11/23 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
vuejs2.0运用原生js实现简单的拖拽元素功能示例
2017/02/24 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
pygame学习笔记(1):矩形、圆型画图实例
2015/04/15 Python
用python一行代码得到数组中某个元素的个数方法
2019/01/28 Python
python实现Excel文件转换为TXT文件
2019/04/28 Python
python用match()函数爬数据方法详解
2019/07/23 Python
GDAL 矢量属性数据修改方式(python)
2020/03/10 Python
基于python纯函数实现井字棋游戏
2020/05/27 Python
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
电信专业应届生自荐信
2013/09/28 职场文书
竞聘副主任科员演讲稿
2014/01/11 职场文书
工程技术员岗位职责
2014/03/02 职场文书
运动会演讲稿
2014/05/07 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
乡镇计划生育工作汇报
2014/10/28 职场文书
2014年学校安全工作总结
2014/11/13 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
SpringBoot读取Resource下文件的4种方法
2021/07/02 Java/Android
python三子棋游戏
2022/05/04 Python
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android