Windows 上多版本 PHP:一个站点一个 FastCGI 版本
在 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 并存:
- 每个 NTS 包独立目录(
C:\PHP\8.3、C:\PHP\8.4)。 - 各自
php.ini。 - 各自注册 FastCGI 应用。
- 每个站点用站点级
*.phphandler 指向对应版本。 - 应用池保持独立做隔离,但别指望池能选 PHP 版本。
C:\PHP\8.3\php-cgi.exeC:\PHP\8.3\php.iniC:\PHP\8.4\php-cgi.exeC:\PHP\8.4\php.ini不要把两个版本放同一目录或共享 ext。extension_dir 错/缺失就是“扩展找不到”的常见原因。
注册两个 FastCGI 应用
Section titled “注册两个 FastCGI 应用”Import-Module WebAdministrationAdd-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。
站点级 handler
Section titled “站点级 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。显式更好审计。
每个版本独立 php.ini
Section titled “每个版本独立 php.ini”; C:\PHP\8.3\php.inicgi.fix_pathinfo=0fastcgi.impersonate=1date.timezone=UTCextension_dir="ext"expose_php=OffPHP 加载错 ini 时,看 php --ini / phpinfo。PHPRC 可以强制目录,但每版本独立目录 + php-cgi 旁边的 ini 更简单。
& C:\PHP\8.3\php-cgi.exe -v& C:\PHP\8.4\php-cgi.exe -vGet-WebConfiguration -PSPath 'MACHINE/WEBROOT/APPHOST' -Filter 'system.webServer/fastCgi' | Select-Object -ExpandProperty Collection给每个站点放一个 info.php,确认 PHP Version 和 Loaded Configuration File。测完删掉。
- 新版本装在旧版本旁边。
- 先用站点级 handler 测一个站点。
- 比对扩展和
php.ini。 - 逐站迁移。
- 回滚不再需要才删旧 FastCGI 应用和目录。
PHP 8.4.27 NTS + IIS FastCGI 在 VM 361 验证。8.3 并存为 E1;在 Server 2025 上照此操作并记录两个 phpinfo 后再标 E2。