跳转到内容

Windows 上多版本 PHP:一个站点一个 FastCGI 版本

核验于 1 分钟阅读

在 IIS 上并存 PHP 8.3 与 8.4:独立目录、FastCGI 应用、站点级 handler 和各自 php.ini。

测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1
版本号
26100.33650
版本
Standard / Datacenter
架构
x64
支持
文档(E1)
证据
E1官方文档
核验日期
2026-10-29
测试机
PHP 8.4.27 FastCGI 在 VM 361 Windows 11 26H2 验证;PHP 8.3 并存方案为 E1
页面类型
方法

PHP 版本由 handler 的 scriptProcessor 决定,不是应用池。要让 8.3 和 8.4 并存:

  1. 每个 NTS 包独立目录(C:\PHP\8.3、C:\PHP\8.4)。
  2. 各自 php.ini。
  3. 各自注册 FastCGI 应用。
  4. 每个站点用站点级 *.php handler 指向对应版本。
  5. 应用池保持独立做隔离,但别指望池能选 PHP 版本。
C:\PHP\8.3\php-cgi.exe
C:\PHP\8.3\php.ini
C:\PHP\8.4\php-cgi.exe
C:\PHP\8.4\php.ini

不要把两个版本放同一目录或共享 ext。extension_dir 错/缺失就是“扩展找不到”的常见原因。

终端窗口
Import-Module WebAdministration
Add-WebConfiguration -PSPath 'MACHINE/WEBROOT/APPHOST' `
-Filter 'system.webServer/fastCgi' `
-Value @{ fullPath = 'C:\PHP\8.3\php-cgi.exe' }
Add-WebConfiguration -PSPath 'MACHINE/WEBROOT/APPHOST' `
-Filter 'system.webServer/fastCgi' `
-Value @{ fullPath = 'C:\PHP\8.4\php-cgi.exe' }

两个可以同时存在;请求用哪个只看 handler。

如果服务器已有全局 PHP_via_FastCGI 指向 8.4,PHP 8.3 站点可以移除它再加自己的:

<configuration>
<system.webServer>
<handlers>
<remove name="PHP_via_FastCGI" />
<add name="PHP83_via_FastCGI"
path="*.php" verb="*"
modules="FastCgiModule"
scriptProcessor="C:\PHP\8.3\php-cgi.exe"
resourceType="Either" />
</handlers>
</system.webServer>
</configuration>

不要 <clear /> 所有 handler;那会删掉静态内容处理器,CSS/图片全挂。只移除要替换的 PHP handler。

8.4 站点可以继续用全局 handler,也可以显式定义 PHP84_via_FastCGI。显式更好审计。

; C:\PHP\8.3\php.ini
cgi.fix_pathinfo=0
fastcgi.impersonate=1
date.timezone=UTC
extension_dir="ext"
expose_php=Off

PHP 加载错 ini 时,看 php --ini / phpinfo。PHPRC 可以强制目录,但每版本独立目录 + php-cgi 旁边的 ini 更简单。

终端窗口
& C:\PHP\8.3\php-cgi.exe -v
& C:\PHP\8.4\php-cgi.exe -v
Get-WebConfiguration -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/fastCgi' |
Select-Object -ExpandProperty Collection

给每个站点放一个 info.php,确认 PHP Version 和 Loaded Configuration File。测完删掉。

  1. 新版本装在旧版本旁边。
  2. 先用站点级 handler 测一个站点。
  3. 比对扩展和 php.ini。
  4. 逐站迁移。
  5. 回滚不再需要才删旧 FastCGI 应用和目录。

PHP 8.4.27 NTS + IIS FastCGI 在 VM 361 验证。8.3 并存为 E1;在 Server 2025 上照此操作并记录两个 phpinfo 后再标 E2。

来源