Windows上PHP与IIS集成的准备工作
首先需要确认当前Windows系统版本,本文以Windows 10和Windows Server 2019为例,操作步骤在多数Windows版本中通用。需要提前准备两个核心组件,分别是IIS服务和PHP运行时,确保系统已经安装.NET Framework 3.5及以上版本,避免后续配置出现依赖缺失问题。

第一步:开启IIS服务及必要功能
打开控制面板,进入程序和功能,选择启用或关闭Windows功能。在弹出的窗口中找到Internet Information Services选项,展开后勾选以下子项:
- Web 管理工具下的全部子项,尤其是IIS管理控制台
- 万维网服务下的应用程序开发功能,必须勾选CGI选项,这是PHP与IIS集成的核心依赖
- 万维网服务下的安全性选项,勾选基本身份验证、Windows身份验证等常用认证方式
- 万维网服务下的常见HTTP功能,勾选静态内容、默认文档等基础功能
勾选完成后点击确定,等待系统完成功能安装,安装结束后可以在开始菜单中找到Internet Information Services (IIS)管理器,说明IIS服务已经成功开启。
第二步:下载并配置PHP运行时
前往PHP官方非Windows版下载页面,选择适合Windows的线程安全版本,建议选择64位版本,下载后解压到固定目录,比如C:\php。进入解压后的目录,复制php.ini-development文件,重命名为php.ini,用记事本打开该配置文件,修改以下核心配置项:
; 开启常用扩展,去掉前面的分号注释 extension=curl extension=gd extension=mbstring extension=mysqlnd extension=pdo_mysql ; 设置扩展目录,指向当前php目录下的ext文件夹 extension_dir = "C:\php\ext" ; 设置时区为中国时区 date.timezone = "Asia/Shanghai" ; 开启FastCGI相关配置 cgi.force_redirect = 0 cgi.fix_pathinfo = 1 fastcgi.impersonate = 1
修改完成后保存php.ini文件,注意该文件需要放在php根目录下,同时需要确保C:\php目录对IIS用户有读取权限,可以右键目录选择属性,在安全选项卡中添加IIS_IUSRS用户组,授予读取和执行权限。
第三步:在IIS中添加PHP处理程序映射
打开IIS管理器,在左侧连接面板中选择当前服务器节点,双击中间面板中的处理程序映射选项。进入处理程序映射页面后,点击右侧操作面板中的添加模块映射,按照以下信息填写:
- 请求路径:*.php
- 模块:FastCgiModule
- 可执行文件:C:\php\php-cgi.exe
- 名称:PHP_via_FastCGI
填写完成后点击请求限制按钮,在映射选项卡中勾选仅当请求映射至以下内容时才调用处理程序,选择文件路径,然后依次点击确定保存配置。此时IIS已经可以识别.php后缀的请求,并交给PHP的FastCGI进程处理。
第四步:调整IIS默认文档和权限
在IIS管理器中选择默认网站,双击默认文档选项,点击右侧的添加按钮,输入index.php,将其移到列表顶部,这样访问网站时会优先查找index.php文件。接着选择默认网站,点击右侧的基本设置,确认物理路径是网站文件存放目录,比如C:\inetpub\wwwroot,同样给该目录添加IIS_IUSRS用户组的读取权限。
如果需要PHP能够写入文件到网站目录,还需要给对应目录添加IIS_IUSRS的写入权限,根据实际需求配置即可,避免直接给整个目录过高的权限。
第五步:验证PHP与IIS集成是否成功
在网站根目录C:\inetpub\wwwroot下新建一个index.php文件,写入以下测试代码:
<?php phpinfo(); ?>
打开浏览器,访问http://localhost/index.php,如果页面成功显示PHP的配置信息,说明PHP与IIS已经集成成功。如果页面出现报错,可以检查以下几个方面:
- php.ini中的extension_dir路径是否正确
- 处理程序映射中的可执行文件路径是否指向正确的php-cgi.exe
- PHP目录和网站目录的IIS_IUSRS权限是否配置正确
- IIS的CGI功能是否已经成功安装
常见问题排查
如果出现500内部服务器错误,可以打开IIS管理器的失败请求跟踪规则,添加PHP相关请求的跟踪,查看具体错误原因。如果是FastCGI进程异常退出,可以检查PHP版本是否与系统架构匹配,或者php.ini中是否有错误的配置项。如果是页面直接下载php文件而不是执行,说明处理程序映射没有配置成功,需要重新检查映射规则。