Home >php教程 >php手册 >Windows下IIS以FastCGI模式运行PHP

Windows下IIS以FastCGI模式运行PHP

WBOY
WBOYOriginal
2016-06-06 19:52:441069browse

由于PHP5.3 的改进,原有的IIS 通过isapi 方式解析PHP脚本已经不被支持,PHP从5.3.0 以后的版本开始使用微软的 fastcgi 模式,这是一个更先进的方式,运行速度更快,更稳定。本文介绍在IIS上以FastCGI模式运行PHP。我们以 Windows 2003 +IIS 6.0(windows200

由于PHP5.3 的改进,原有的IIS 通过isapi 方式解析PHP脚本已经不被支持,PHP从5.3.0 以后的版本开始使用微软的 fastcgi 模式,这是一个更先进的方式,运行速度更快,更稳定。本文介绍在IIS上以FastCGI模式运行PHP。我们以 Windows 2003 + IIS 6.0(windows2003自带) 为例。

第一步:下载安装的文件

1. FastCGI 版本 fcgisetup_1.5_x86_rtw.msi
2. MySQL 版本 mysql-5.5.19-win32.msi
3. PHP 版本 php-5.3.8-nts-Win32-VC9-x86.zip

提示:
1. 我们这里使用目前最新的FastCGI 1.5版本。官方地址
2. Windows下安装MySQL就选择.msi安装包格式,我们选择了mysql-5.5.19-win32.msi ,双击根据向导安装即可,简单方便。
3. PHP我们选择用php-5.3.8-nts-Win32-VC9-x86.zip这个版本。“vc9”是为IIS定制的。“nts”是非线程安全版本,针对PHP的FastCGI安装方式。 

第二步:安装文件

1. 在要安装的磁盘建一个文件夹。我们在D盘的根目录下创建一个Web文件夹。 D:\Web。
2. 在Web文件夹下创建一个WWW文件夹,用来存放你的PHP网站程序。D:\Web\WWW。
3. 把下载的php-5.3.8-nts-Win32-VC9-x86.zip 解压到 D:\Web\PHP 文件夹。
4. 安装MySql数据库,把MySQL安装到 D:\Web\MySQL文件夹。具体MySQL安装过程可以参考文档MySQL安装图解。
5. 为IIS安装FastCGI扩展。首先确定系统已经安装好了IIS。然后双击fcgisetup_1.5_x86_rtw.msi安装,如果C盘是你的Windows系统安装盘,它会把fcgi特定的文件复制到 C:\Windows\system32\inetsrv 文件夹下,注册并且使fcgi的web服务生效,这时在IIS的 “Web服务扩展” 里多了 FastCGI Handler。

第三步:配置 IIS

1. 点击 “控制面板” -> “管理工具” -> “internet 信息服务”(或者直接点击“开始”->“运行”->输入inetmgr.exe),打开IIS。
2. 点击“网站”->“右键-属性”,在属性对话栏中点击“主目录”->“配置”->“添加”。
3. 在"添加与编辑应用程序扩展名映射”对话框中,点击浏览,找到 C:\Windows\system32\inetsrv 中的fcgiext.dll。扩展名写上“.php”, “动作”项中点“限制为”,写上“GET,POST,HEAD”,把下面两个选项 “脚本引擎”、“确认文件是否存在” 都勾上。确认配置。
4. 返回网站属性框,点击“文档”,添加 “index.php” 做为默认页。最后点击“确认”。
5. 点击“网站”->“右键-新建”->“网站”,建立一个新站点,端口我们这里设置为 8080,网站主目录路径为 D:\Web\WWW。

第四步:配置FastCGI

在安装FastCGI后,在C:\Windows\system32\inetsrv文件夹中有以下三个重要文件:

fcgiext.dll - 这是fastcgi控制柄动态链接库。它可以为与fastcgi进行通信的程序处理请求。
fcgiext.ini - 这是配置文件,包含扩展到fastcgi进程的文件映射。它也包含了fastcgi进程池的配置。
fcgiconfig.js - 这个配置fastgci的扩展。这个脚本更新fcgiext.ini文件,修改iis元库,如果有必要的话重复使用web服务应用池。

这里配置FastCGI有两种方法,一种是通过命令行来实现配置,另一种直接修改fcgiext.ini文件。

1. 通过命令行来实现配置

打开命令行,将地址转换到C:\Windows\system32\inetsrv,输入以下命令

	cscript fcgiconfig.js -add -div:"PHP" -extension:php -path:"D:\Web\php\php-cgi.exe"
	cscript fcgiconfig.js -set -div:"PHP" -InstanceMaxRequests:5000
	cscript fcgiconfig.js -set -div:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000
	cscript fcgiconfig.js -set -div:"PHP" -RequestTimeout:360
	cscript fcgiconfig.js -set -div:"PHP" -ActivityTimeout:120

脚本的含义,分别是:

  1. 注册PHP到FastCGI。
  2. InstanceMaxRequests 用来设置应用程序池回收。FastCGI进程请求数达到InstanceMaxRequests数值5000,应用程序池将自动回收。默认值是1000。
  3. 当环境变量PHP_FCGI_MAX_REQUESTS达到10000将自动回收应用程序池。
  4. RequestTimeout 设置请求超时时间,也就是请求允许的最大时间,如果FastCGI进程请求超过此设置将被禁止,值是90秒。
  5. ActivityTimeout 指定FastCGI进程请求的最大活跃时间,在设定时间内,FastCGI进程和IIS没有通信,将终止进程。默认值是70秒。

2. 直接配置fcgiext.ini

打开C:\windows\system32\inetsrv\fcgiext.ini文件,加入

	[Types]
	  php=PHP
	[PHP]
	  ExePath=D:\Web\php\php-cgi.exe

	InstanceMaxRequests=5000
	EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000
	RequestTimeout=360
	ActivityTimeout=120

提示:“php” 表示扩展名,“PHP” 是配置节名称,以 “[PHP]” 定义。

把上面代码复制到fcgiext.ini的末尾,保存就好了。

第五步:配置PHP

打开PHP安装目录,即D:\Web\PHP,我们可以看到目录下有两个这样的文件 php.ini-development 和 php.ini-production,第一个是开发使用的配置文件,第二个是生产环境的配置,因为我们是在本机做开发,所以选择前者。将php.ini-development复制一份到同目录下,并改名为 php.ini。这个php.ini 就是当前使用的配置文件,以下几步都是在修改这个php.ini文件的内容。 另外要注意的是修改php.ini文件后需重新启动IIS服务,新设置才会生效。参见文档:如何重启IIS服务的方法

1. 设置关于FastCGI部分

找到下面几行,那前面的引号“;” 去掉,参数设置为如下

	fastcgi.impersonate = 1
	cgi.fix_pathinfo= 1
	cgi.force_redirect = 0

它们的说明请参考cgi.force-redirect;cgi.fix-pathinfo;fastcgi.impersonate。

2. 指定PHP扩展库的存放目录

在Windows下PHP的扩展库通常以 DLL 形式存放在PHP的ext目录中。
使用文本工具打开php.ini文件,查找extension_dir = "ext",也就是在 On windows 下面那一行。把它前面的分号“;”去除掉,改为如下:

        extension_dir = "D:/Web/PHP/ext"

extension_dir 表示PHP扩展库的具体目录,以便调用相应的DLL文件。

3. 开启相应的扩展库

默认情况下许多PHP的扩展库都是关闭的,比如默认PHP不支持连接Mysql数据库,需开启相应的扩展库。
这里我们开启一些常用的扩展库。
查找 ; Windows Extensions(大概在941行),在它的下面是extension列表。
找到如下扩展:

        ;extension=php_curl.dll
        ;extension=php_gd2.dll
        ;extension=php_mbstring.dll
        ;extension=php_exif.dll
        ;extension=php_mysql.dll
        ;extension=php_mysqli.dll
        ;extension=php_pdo_mysql.dll
        ;extension=php_pdo_odbc.dll
        ;extension=php_sockets.dll
        ;extension=php_xmlrpc.dll
        ;extension=php_xsl.dll

把以上extension 前面的分号 “;” 去掉。如果你希望加载其它扩展模块,方法相同,只要去掉前面的分号即可。
提示1:Exif 扩展是用来显示图片的 exif 信息的,因为该扩展需要 mbstring.dll 支持,所以必须将 extension=php_exif.dll 这一行写到extension=php_mbstring.dll 的后面。
提示2:如果PHP自带的扩展库不能满足你的需要,你可以去 pecl.php.net 查找并下载你需要的库。windows用户可以去 pecl4win.php.net 或者 http://downloads.php.net/pierre/ 下载已经编译好的DLL文件,也可以去http://museum.php.net/php5/ 载PECL集合压缩包。
提示3:很多人在找php_zip.dll,其实从php5.3开始已经集成了zip扩展,你可以用 找到zip扩展的说明。


5. 配置PHP的Session功能

在使用session功能时,我们必须配置session文件在服务器上的保存目录。我们需要为session建立一个可读写的目录,这个目录最好独立于网站目录之外。
这里把目录上建在了D:\Web\sessiontmp,然后在 php.ini 配置文件中找 ;session.save_path = "/tmp" (大概在1467行),去掉前面的分号“;” ,改为如下:

        session.save_path = "D:/Web/sessiontmp"

6. 配置PHP的文件上传功能

同session一样,在使用PHP文件上传功能时,我们必须要指定一个临时文件夹以完成文件上传功能,否则文件上传功能会失败。
我们建立一个可读写的目录文件夹 D:\Web\fileuploadtmp,然后在 php.ini 配置文件中找到 ;upload_tmp_dir = (大概875行),修改为:

        upload_tmp_dir = "D:/Web/fileuploadtmp"

PHP默认上传文件大小不超过2M,要想上传大于2M的文件,请参考文档  配置php.ini实现文件上传功能。

7. 设置时区

在 php.ini 配置文件查找 ;date.timezone = ,去掉前面的分号“;” 改为如下:

	date.timezone = PRC

date.timezone是PHP5.1开始新增加的配置参数,用来设置时区。默认date.timezone是被注释掉的,也就是默认时区是UTC格林威治标准时间。
我们这里改为 date.timezone = PRC(PRC,People’s Republic of China,中华人民共和国),也就是日期使用中国的时区。这样可以解决时间相差八小时的问题。

第六步:测试

将如下代码保存为index.php文件,放到D:\Web\WWW目录下面。


        
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>测试服务器</title>
        
        
            <div style="text-align:center; color:red">
            <?php $link=mysql_connect("localhost","<em>你的mysql管理账号","<em>你的mysql管理密码</em>");
                if(!$link) echo "MySQL数据库 连接失败!";
                else echo "MySQL数据库 连接成功!";
                mysql_close();
            ?>
            </div>
            <br>
            <?php phpinfo(); ?>
        

然后在浏览器地址栏输入“http://localhost:8080/index.php”。结果如下图所示:

Windows下IIS以FastCGI模式运行PHP

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn