在Windows Server 2003 64位操作系统中完成PHP环境配置后,当尝试执行PHP文件时,系统弹出错误提示:“1% 不是有效的 win32 应用程序”(英文提示为“%1 is not a valid Win32 application”)。此时HTML文件可正常访问,唯独PHP文件无法解析,表明问题并非环境配置缺失,而是与系统架构及IIS运行模式直接相关。
Windows Server 2003 64位系统默认启用IIS的64位工作模式,而PHP作为32位应用程序,其核心库与依赖组件均基于32位架构设计。当64位IIS尝试加载32位PHP引擎时,因进程位宽不匹配(64位进程无法直接执行32位机器码),导致系统判定目标文件“无效”,从而触发上述报错。这种兼容性问题在混合部署32位应用与64位服务器的场景中较为常见,需通过调整IIS配置以支持32位应用运行。
为解决该兼容性问题,需显式配置IIS允许32位应用程序在其应用程序池中运行。具体操作步骤如下:
1. 打开命令提示符环境:通过“开始”菜单依次选择“运行”,输入cmd命令并执行,进入Windows命令行界面。
2. 执行32位应用支持启用脚本:在命令提示符中输入以下命令并回车执行:
```
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
```
其中,%SYSTEMDRIVE%为系统盘符变量(默认为C盘),若系统盘非C盘,需手动替换为实际盘符(如D:\inetpub\adminscripts\adsutil.vbs)。该命令通过IIS管理脚本adsutil.vbs修改应用程序池配置参数Enable32bitAppOnWin64,将其值设为1,以启用32位应用支持功能。
执行完成后,重启IIS服务(可通过iisreset命令实现),PHP文件即可正常解析运行。
完成上述配置后,部分用户可能会遇到新问题:访问网页时返回“Service Unavailable”(服务不可用)错误。该问题通常与ASP.NET脚本映射未正确注册相关,特别是在.NET Framework版本与IIS未完全绑定的场景下。解决方法如下:
1. 进入命令提示符环境:同上述步骤,通过“开始→运行→cmd”打开命令行界面。
2. 注册ASP.NET脚本映射:执行以下命令重新注册指定版本的.NET Framework:
```
%SYSTEMROOT%\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe -i
```
其中,%SYSTEMROOT%为系统目录变量(默认为C:\WINDOWS),v1.1.4322为.NET Framework 1.1版本号。若需注册其他版本(如.NET 2.0),可替换为对应目录(如v2.0.50727)。该命令通过aspnet_regiis.exe工具重新生成IIS与ASP.NET的脚本映射关系,确保IIS能够正确处理ASP.NET请求。
执行后重启IIS服务,“Service Unavailable”问题即可得到解决。