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语法速查表
Dec 06 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
PHP写UltraEdit插件脚本实现方法
Dec 26 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
探讨如何把session存入数据库
Jun 07 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
Jul 22 PHP
PHP魔术方法__GET、__SET使用实例
Nov 25 PHP
Laravel 5框架学习之Laravel入门和新建项目
Apr 07 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
Mar 21 PHP
thinkphp自带验证码全面解析
Sep 18 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
Jun 02 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
Zend公司全球首推PHP认证
2006/10/09 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
用javascript实现自定义标签
2007/05/08 Javascript
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
浅析node.js中close事件
2014/11/26 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
python开启多个子进程并行运行的方法
2015/04/18 Python
python版大富翁源代码分享
2018/11/19 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
python 切换root 执行命令的方法
2019/01/19 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
Python常用库大全及简要说明
2020/01/17 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
css3遮罩层镂空效果的多种实现方法
2020/05/11 HTML / CSS
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
美国宠物商店:Wag.com
2016/10/25 全球购物
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
对象的序列化(serialization)类是面向流的,应如何将对象写入到随机存取文件中
2015/06/22 面试题
大学三年的自我评价
2013/12/25 职场文书
工资收入证明样本(5篇)
2014/09/16 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
Python道路车道线检测的实现
2021/06/27 Python
利用Python实时获取steam特惠游戏数据
2022/06/25 Python