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学习笔记(三)操作符与控制结构
Aug 06 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
May 25 PHP
33道php常见面试题及答案
Jul 06 PHP
thinkPHP查询方式小结
Jan 09 PHP
SSO单点登录的PHP实现方法(Laravel框架)
Mar 23 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
Jun 06 PHP
详解php中serialize()和unserialize()函数
Jul 08 PHP
PHP 多任务秒级定时器的实现方法
May 13 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 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中使用mktime获取时间戳的一个黑色幽默分析
2012/05/31 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
php语言中使用json的技巧及json的实现代码详解
2015/10/27 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
JS传值出现中文参数乱码的解决方法
2016/06/30 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
解决vue-router 嵌套路由没反应的问题
2020/09/22 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
python时间整形转标准格式的示例分享
2014/02/14 Python
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
Python复制文件操作实例详解
2015/11/10 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
Python 使用 environs 库定义环境变量的方法
2020/02/25 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
Python如何合并多个字典或映射
2020/07/24 Python
详解FireFox下Canvas使用图像合成绘制SVG的Bug
2019/07/10 HTML / CSS
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
医院护士的求职信
2014/01/03 职场文书
二手房购房协议书范本
2014/10/05 职场文书
市场营销计划书范文
2015/01/16 职场文书
观看安全警示教育片心得体会
2016/01/15 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python