IIS 原生面向 ASP.NET,PHP 需要借助 FastCGI 运行。很多问题不是 PHP 本身,而是映射、权限和配置项没对齐。理解这条链路,排查会快很多。
环境准备
先确认三件事:IIS 已安装 CGI 模块;PHP 解压目录避开含空格的路径;下载的是与系统位数匹配的 NTS 版本。把 php.ini-production 复制为 php.ini,不要直接改模板。
FastCGI 映射怎么配
在 IIS 管理器中选中站点,进入“处理程序映射”,添加模块映射:请求路径填 *.php,模块选 FastCgiModule,可执行文件填 php-cgi.exe 的完整路径,名称自定义。勾选“请求限制”里的“仅当请求映射到文件时才调用处理程序”,避免路径伪造。
映射完成后,在站点根目录放一个 index.php,内容为 <?php phpinfo();,浏览器访问验证。若返回 500,先看事件查看器与 PHP 错误日志,而不是急着改代码。
php.ini 的几个关键项
fastcgi.impersonate = 1:让 PHP 以请求者身份访问文件,减少权限冲突。cgi.fix_pathinfo = 0:降低路径解析被利用的风险。extension_dir指向ext目录,再按需开启扩展。date.timezone必须设置,否则部分框架会报错。
修改后重启 IIS 或回收应用程序池生效。
权限与 500 错误排查
IIS 的应用程序池身份通常是 IIS_IUSRS 或自定义账户。PHP 目录需要该身份有读取和执行权限;上传目录、缓存目录需要写权限,但不要给整站写权限。
常见 500 的成因集中在:php-cgi 路径写错、php.ini 路径未指定、扩展加载失败、站点目录权限不足。可在 FastCGI 设置中开启标准错误输出,或临时把 display_errors 打开定位,上线前务必关闭。
URL 重写与伪静态
框架通常依赖重写。安装 URL Rewrite 模块后,导入框架自带的 web.config 规则,把不存在的路径交给 index.php 处理。注意规则顺序,静态文件规则应排在前面,避免图片请求被转发。
上线前的检查清单
确认 displayerrors 关闭、错误日志路径可写、uploadmaxfilesize 与 postmax_size 满足业务、会话目录存在且可写。做完这几步,IIS 跑 PHP 基本稳定,后续问题多与扩展和权限有关。