Php 在Windows 10上通过ODBC连接Access数据库时发生IIS 500错误

Php 在Windows 10上通过ODBC连接Access数据库时发生IIS 500错误,php,ms-access,iis,odbc,Php,Ms Access,Iis,Odbc,我从Windows 8.1(64位)升级到Windows 10(64位)。我使用PHP运行IIS-10服务器,它使用ODBC连接MS Access数据库。我正在运行32位版本的Access 2016。我已安装Access/Jet数据库驱动程序 我使用32位ODBC数据源管理员创建了一个名为“TFD_Local”的DSN,它连接到服务器上的.accdb数据库 在IIS上运行的PHP脚本执行以下操作 $odbc = odbc_connect('TFD_Local', '', '') or repo

我从Windows 8.1(64位)升级到Windows 10(64位)。我使用PHP运行IIS-10服务器,它使用ODBC连接MS Access数据库。我正在运行32位版本的Access 2016。我已安装Access/Jet数据库驱动程序

我使用32位ODBC数据源管理员创建了一个名为“TFD_Local”的DSN,它连接到服务器上的.accdb数据库

在IIS上运行的PHP脚本执行以下操作

 $odbc = odbc_connect('TFD_Local', '', '') or reportError("Connect error: " . odbc_errormsg() . " " . odbc_error());
我得到一个:

HTTP Error 500.0 - Internal Server Error
C:\Program Files (x86)\PHP\v5.4\php-cgi.exe - The FastCGI process exited unexpectedly

我怀疑这与32/64位不兼容有关,因为它在运行相同软件的32位机器上运行正常。它曾经在我的Win 8.1 64位系统上运行。注意,像phpinfo这样的东西运行得很好。需要做些什么才能避免产生500错误?

回答我自己的问题:


我删除了通过管理工具/ODBC数据源(32位)创建的DSN,然后运行C:\Windows\SysWOW64\odbcad32.exe并重新创建了它。我不知道区别是什么,但这起到了作用。

注意,我在默认应用程序池中尝试了“启用32位应用程序”,但当我这样做时,DefaultAppPool停止了。sysWow是32位程序驻留在x64版本的windows中的地方。(看起来很奇怪,因为system32通常是x64位代码所在的地方!)从控制面板启动ODBC管理器时,默认情况下会启动x64位版本的ODBC管理器。因此,要启动x32管理器,那么您在syswow中指出的版本是适合x32驱动程序运行的正确版本。这可能表明您正在运行x32位版本的IIS。我的管理工具中既有32位ODBC管理器,也有64位ODBC管理器,但C:\Windows\SysWOW64\odbcad32.exe中的管理器的界面与管理工具中的稍有不同。就像我说的,我不知道区别是什么,但是SysWow64中的一个可以工作,而另一个不能。syswow一个用于x32位程序(所以这是正确的版本)。您必须将驱动程序的位大小与Access的版本“匹配”(Access既有x32版本,也有x64版本——我想值得指出的是,不能同时安装这两个版本)。如果跳转到x64位版本的IIS,则必须开始使用其他ODBC管理器,并安装x64位版本的Access。事实上,使用x64版本的IIS更为常见,因此您可能会在将来遇到这个问题。我相信我正在运行64位版本的IIS。当我查看任务管理器时,我看到w3wp.exe(IIS工作进程)正在运行,它是64位的。64位ODBC管理器显示32位数据源,但表示必须从32位ODBC管理器管理这些数据源。