本章包含有在 Windows XP 和 Windows Server 2003 下的 Internet 信息服务(IIS)5.1 和 IIS 6.0 中安装 PHP 的指南。有关在 Windows Vista,Windows Server 2008,Windows 7 以及 Windows Server 2008 R2 下的 IIS 7.0 以及更高版本中安装 PHP 的指南见 Microsoft IIS 7.0 及更高版本一章。
根据手工安装步骤的说明下载和安装 PHP。
Note:
在使用 IIS 时推荐使用非线程安全的 PHP。可以在 » PHP for Windows: Binaries and Sources Releases 下载。
按以下示例在 php.ini 文件中配置 针对 CGI- 和 FastCGI- 的指令:
Example #1 php.ini 中的 CGI 和 FastCGI 设定
fastcgi.impersonate = 1 fastcgi.logging = 0 cgi.fix_pathinfo=1 cgi.force_redirect = 0
下载并安装 » FastCGI for IIS。有 32 位和 64 位平台的,根据用户平台选择相应的下载。
用以下命令配置 FastCGI 扩展处理 PHP 请求。用指向 php-cgi.exe 文件的绝对路径替换其中的 "-path" 的参数。
Example #2 配置 FastCGI 扩展以处理 PHP 请求
cscript %windir%\system32\inetsrv\fcgiconfig.js -add -section:"PHP" ^ -extension:php -path:"C:\PHP\php-cgi.exe"
此命令将创建对应于 *.php 文件后缀的 IIS 脚本映射,则所有以 *.php 结尾的 URL 都会被 FastCGI 扩展处理。此外还配置了 FastCGI 扩展使用 php-cgi.exe 可执行文件来处理 PHP 请求。
Note:
至此所需的安装和配置步骤就完成了。以下剩余的指示是可选项,但是强烈推荐以使得在 IIS 上达到最佳的 PHP 功能和性能。
在 IIS 中使用 PHP 建议激活 FastCGI 的角色扮演功能。此功能在 php.ini 中由 fastcgi.impersonate 指令控制。激活角色扮演后,PHP 将以 IIS 所认证的用户帐号身份进行所有的文件系统操作。这将确保即使在(同一个主机)不同的 IIS 网站下使用了同一个 PHP 进程,只要每个网站使用了不同的用户帐号作为 IIS 身份认证,则这些网站的 PHP 脚本将不能访问彼此的文件。
例如在 IIS 5.1 和 IIS 6.0 中,默认配置下的匿名认证将使用内置的用户帐号 IUSR_<MACHINE_NAME> 作为默认身份。这意味着要使得 IIS 能够运行 PHP 脚本,至少要将这些脚本的读取权限授予 IUSR_<MACHINE_NAME> 帐号。如果 PHP 程序需要对某些文件或文件夹进行写入操作,那 IUSR_<MACHINE_NAME> 帐号也需要有相对应的写入权限。
要查看哪个用户帐号被用作 IIS 匿名认证的身份,使用以下步骤:
在 Windows 开始菜单中选择“运行...”,输入“inetmgr”并点击“确定”;
在树形视图下展开“网站”节点,右键点击要使用的网站并选择“属性”;
点击“目录安全”面板;
记录下在“认证方式”对话框中的“用户名”字段。
要修改文件及文件夹的权限,使用 Windows 资源管理器或者 icacls 命令行。
Example #3 配置文件访问权限
icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)
IIS 的默认文档用于没有指定文件名的 HTTP 请求。对于 PHP 应用来说默认文档通常为 index.php。要将 index.php 添加到 IIS 的默认文档列表中,使用以下步骤:
在 Windows 开始菜单中选择“运行...”,输入“inetmgr”并点击“确定”;
在树形视图下展开“网站”节点,右键点击要使用的网站并选择“属性”;
点击“文档”面板;
点击“添加...”按钮并在“默认内容页面”中输入“index.php”。
用以下命令配置 IIS FastCGI 对于 PHP 进程的回收设定。FastCGI 的设置 instanceMaxRequests 控制了单一的 php-cgi.exe 进程处理多少个请求之后会被 IIS 关闭。PHP 环境变量 PHP_FCGI_MAX_REQUESTS 控制了一个 php-cgi.exe 进程处理多少个请求之后会被自我回收。要确保 FastCGI 中 InstanceMaxRequests 的值小于或等于 PHP_FCGI_MAX_REQUESTS 的值。
Example #4 配置 FastCGI 和 PHP 的回收
cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^ -InstanceMaxRequests:10000 cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^ -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000
如果会有一些需时较长的 PHP 脚本运行,则增加超时的设定值。有两个控制超时的指令 activityTimeout 和 requestTimeout。有关这些设定的更多信息参见 » Configuring FastCGI Extension for IIS 6.0。
Example #5 配置 FastCGI 超时设定
cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^ -ActivityTimeout:90 cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^ -RequestTimeout:90
PHP 在几个位置搜索配置文件 php.ini,可以通过环境变量 PHPRC 来改变 php.ini 的默认位置。要使得 PHP 从用户指定的位置加载配置文件,使用以下命令。指向 php.ini 文件的绝对路径应作为环境变量 PHPRC 的值。
Example #6 改变 php.ini 文件的位置
cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^ -EnvironmentVars:PHPRC:"C:\Some\Directory\"