Microsoft IIS/PWS
本节包括针对 IIS(Microsoft Internet Information Server)的说明与提示。
Warning如果使用 CGI
方式安装,则服务器对于某些可能的攻击是开放的。请阅读
CGI
安全一章以学习如何防御这些攻击。
PHP 与 IIS 或 PWS 安装的通用事项
-
首先请阅读手工安装步骤。不要跳过这一步,这里提供了将
PHP 安装到 Windows 中的极其重要的信息。
-
CGI 用户必须在 php.ini 中将
cgi.force_redirect
指令设为 0。其重要细节请阅读
FAQ
中的cgi.force_redirect。此外,CGI 用户可能需要设定 cgi.redirect_status_env
指令。在使用这些指令时,确保它们没有在 php.ini 中被注释掉。
-
PHP 4 的 CGI 文件名是 php.exe 而在 PHP 5 中是
php-cgi.exe。在 PHP 5 中,php.exe
是 CLI 版本,不是 CGI。
-
修改 Windows 的 PATH 环境变量以把
PHP 目录包括进去。这样 PHP 的 DLL 文件,可执行文件和
php.ini 就都可以保留在 PHP 目录中而不用把
Windows 系统目录搞乱了。更多细节见 FAQ 中的设定路径 PATH。
-
IIS 专用用户(通常为 IUSR_MACHINENAME)需要能够读取各个文件和目录的权限,例如
php.ini,docroot 和 session 的 tmp 目录。
-
确保在 php.ini 中正确设定了
extension_dir 和
doc_root 指令的值。这些指令依赖于
PHP 被安装的系统。在 PHP 4 中,extension_dir 是
extensions 而在 PHP 5 中是
ext。因此在 PHP 5 中 extensions_dir 的一个取值例子是
"c:\php\ext",IIS 的 doc_root 的取值例子是
"c:\Inetpub\wwwroot"。
-
PHP 扩展库的 DLL 文件,如 php_mysql.dll 和
php_curl.dll,存放于 PHP 下载的 ZIP
包中(自动安装包里没有)。在 PHP 5 中,很多扩展库都是
PECL 的一部分,可以从“Collection of PECL modules”包中下载,例如
php_zip.dll 和
php_ssh2.dll。» 点击进入 PHP 下载页。
-
在定义应用程序扩展名映射时,应选中“检查文件是否存在”。以极小的性能为代价,IIS(或者
PWS)会在调用 PHP 之前检查脚本文件是否存在并选出认证方法。这意味着 web
服务器会提供一个有道理的 404 形式错误信息而不是一条 CGI
错误说什么 PHP 没有输出任何数据。
Windows NT/200x/XP 和 IIS 4 或更高版本
PHP 可以安装为 CGI 或者 ISAPI 模块。不管哪种,都需要启动
Microsoft 管理控制台(也可能是“Internet 信息服务”,在
Windows NT 4.0 Option Pack 中或者在 Windows 2000/XP
下的控制面板=>管理工具)。然后右键点击 web
服务器节点(通常为“默认网站”),并选择“属性”。
如果想用 CGI 方式,按如下方法进行:
-
选择“主目录”,“虚拟目录”或“目录”标签页,然后进行:
-
将执行权限改为“纯脚本”
-
点“配置”按钮,选择“映射”标签页。点击“添加”按钮,将“可执行文件”指向适当的
CGI 文件名。例如 PHP 5 的值可能是:C:\php\php-cgi.exe。在“扩展名”中填入
.php。选择“全部动作”(或者“限制为”留空),选中“脚本引擎”。然后点击“确定”。
-
设定合适的目录安全性(在 Internet 信息服务中完成)。如果
NT 服务器使用 NTFS 文件系统,给 I_USR_ 用户加上
php.exe/php-cgi.exe
文件所在目录的可执行权限(通过资源管理器完成)。
要用 ISAPI 模块方式,按如下方法进行:
-
如果不想用 PHP 进行 HTTP 认证,应该跳过这一步。在“ISAPI
筛选器”标签页中添加一个新的 ISAPI 筛选器。“筛选器名称”设为
PHP,“可执行文件”设为
php4isapi.dll/php5isapi.dll 的路径。
-
选择“主目录”,“虚拟目录”或“目录”标签页,然后进行:
-
将执行权限改为“纯脚本”
-
点“配置”按钮,选择“映射”标签页。点击“添加”按钮,将“可执行文件”指向适当的
ISAPI DLL。例如 PHP 5 的值可能是:C:\php\php5isapi.dll。在“扩展名”中填入
.php。选择“全部动作”(或者“限制为”留空),选中“脚本引擎”。然后点击“确定”。
-
完全停止 IIS(NET STOP iisadmin)
-
重新启动 IIS(NET START w3svc)
对于 IIS 6(2003 Server),打开 IIS 管理器,进入 web
服务扩展,点击“添加一个新的 web 服务扩展”,“扩展名”中输入名称,例如
PHP,再点击“添加”按钮,点击“浏览”选择要么 ISAPI 文件(php4isapi.dll
或 php5isapi.dll)或者 CGI 文件(php.exe
或 php-cgi.exe)作为“文件路径”后点“确定”,然后选中“设置扩展状态为允许”并点“确定”。
要使用 index.php 作为默认文档,在“文档”标签页中选择“添加”。输入
index.php 并点“确定”。用上下箭头按钮调整顺序。这和在
Apache 中设定 DirectoryIndex 相似。
对于每个要关联为 PHP 脚本的后缀都要重复以上步骤。.php
是最常用的,此外为兼容一些遗留下来的老程序可能还需要加上 .php3。
如果过些时候之后碰到 CPU 占用率达到 100%,则取消选中“缓存
ISAPI 应用程序”(“主目录”下点“配置”按钮”)。
Windows 和 PWS 4
PWS 4 不支持 ISAPI,只能使用 PHP CGI。
-
编辑包里附上的
pws-php4cgi.reg/pws-php5cgi.reg
文件(PHP 4 在 SAPI 目录下,PHP 5 在主目录下)改为自己的
php.exe/php-cgi.exe
文件的路径。反斜线应双写,例如:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\w3svc\parameters\Script
Map] ".php"="C:\\php\\php.exe"(如果用 PHP 5 则改为
C:\\php\\php-cgi.exe)。然后将此注册表文件合并入系统;鼠标双击此文件即可。
-
在 PWS 管理器中,右键点击需要加入 PHP 支持的目录并选择“属性”。选中“执行”,并确认。
Windows 和 PWS/IIS 3
配置此服务器的推荐方法是使用随包发布的注册表文件(PHP 4
是 SAPI 目录下的 pws-php4cgi.reg,PHP 5 是主目录下的
pws-php5cgi.reg)。可能要编辑此文件已确保其中的
PHP 安装目录和扩展库目录符合用户自己的设置。或者按以下步骤手工完成。
Warning
以下步骤涉及到直接操作 Windows
注册表。如果出错可能使系统不稳定,强烈建议先备份注册表。如果用户损坏了注册表
PHP 开发组不负任何责任。
-
运行 Regedit。
-
找到:HKEY_LOCAL_MACHINE /System
/CurrentControlSet /Services /W3Svc /Parameters
/ScriptMap。
-
在编辑菜单选择:新建->字符串值。
-
输入 PHP 脚本想要使用的后缀,例如 .php。
-
双击新建的字符串值并在“数值数据”栏里输入 php.exe
的路径,例如 PHP 4 是 C:\php\php.exe "%s" %s,或者
PHP 5 是 C:\php\php-cgi.exe "%s" %s。
-
对每个要关联为 PHP 脚本的文件后缀名重复以上步骤。
以下步骤不影响 web 服务器安装,仅适用于想在命令行下运行 PHP
脚本(例如运行
C:\myscripts\test.php)或者在资源管理器窗口中双击文件名就运行程序。如果更希望双击
PHP 文件名是将其调入文本编辑器,则跳过以下步骤。
-
找到:HKEY_CLASSES_ROOT。
-
在编辑菜单选择:新建->项。
-
将新项命名为前一节设的后缀,例如:.php。
-
选中新项,在右边栏双击“默认”并输入 phpfile。
-
对每个在前一节设定的后缀都重复以上步骤。
-
在 HKEY_CLASSES_ROOT
下再创建另一个新建->项 并命名为 phpfile。
-
选中新项 phpfile,在右边栏双击“默认”并输入
PHP Script。
-
右键点击 phpfile
项并选择新建->项,命名为 Shell。
-
右键点击 Shell
项并选择新建->项,命名为 open。
-
右键点击 open
项并选择新建->项,命名为 command。
-
选中新项 command,在右边栏双击“默认”并输入
php.exe
的路径,例如:c:\php\php.exe -q %1(不要忘了
%1)。
-
退出 Regedit。
-
如果是 Windows 下的 PWS,重启动以重新加载注册表。
PWS 和 IIS 3 的用户现在就拥有了完全可运作的系统。IIS 3
用户可以使用来自 Steven Genusa
的漂亮» 工具来配置脚本映射。