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令牌 Token改进版
Jul 18 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
PHP实现支持SSL连接的SMTP邮件发送类
Mar 05 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
Dec 19 PHP
php组合排序简单实现方法
Oct 15 PHP
PHP新特性详解之命名空间、性状与生成器
Jul 18 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
PHP implode()函数用法讲解
Mar 08 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 PHP
php并发加锁问题分析与设计代码实例讲解
Feb 26 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下使用SimpleXML 处理XML 文件
2010/02/27 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
php如何实现只替换一次或N次
2015/10/29 PHP
Mac下快速搭建PHP开发环境步骤详解
2019/05/05 PHP
JavaScript 的方法重载效果
2009/08/07 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
jquery使用ColorBox弹出图片组浏览层实例演示
2013/03/14 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
Zabbix添加Node.js监控的方法
2016/10/20 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
带你了解session和cookie作用原理区别和用法
2017/08/14 Javascript
响应式框架Bootstrap栅格系统的实例
2017/12/19 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
Node.js API详解之 util模块用法实例分析
2020/05/09 Javascript
浅谈webpack构建工具配置和常用插件总结
2020/05/11 Javascript
[06:33]DOTA2亚洲邀请赛小组赛第二日 TOP10精彩集锦
2015/01/31 DOTA
python中多层嵌套列表的拆分方法
2018/07/02 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
python hash每次调用结果不同的原因
2019/11/21 Python
HTML5实现预览本地图片
2016/02/17 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
经理管理专业自荐信范文
2013/12/31 职场文书
教堂婚礼主持词
2014/03/14 职场文书
工地安全生产标语
2014/06/06 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
如何写观后感
2015/06/19 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技