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 采集程序原理分析篇
Mar 05 PHP
PHP开发环境配置(MySQL数据库安装图文教程)
Apr 28 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
解析dedecms空间迁移步骤详解
May 15 PHP
php生成扇形比例图实例
Nov 06 PHP
PHP 中提示undefined index如何解决(多种方法)
Mar 16 PHP
PHP简单实现无限级分类的方法
May 13 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
PHP Cookie学习笔记
Aug 23 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
Sep 21 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 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重新实现PHP脚本引擎内置函数
2007/03/06 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
js 分栏效果实现代码
2009/08/29 Javascript
javascript 嵌套的函数(作用域链)
2010/03/15 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
jquery采用oop模式class类的使用示例
2016/01/22 Javascript
JS实现表单多文件上传样式美化支持选中文件后删除相关项
2016/09/30 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
python合并同类型excel表格的方法
2018/04/01 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
安装docker-compose的两种最简方法
2019/07/30 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
法律专业应届本科毕业生求职信
2013/10/25 职场文书
车间班组长岗位职责
2013/11/13 职场文书
转党组织关系介绍信
2014/01/08 职场文书
外贸业务员求职信
2014/06/16 职场文书
环保证明
2015/06/23 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python