为什么我从IIS获得这个500错误?

我在Windows 7 Ultimate x64上的IIS 7.5上运行PHP 5.3.1。 我一直在尝试使用ADODB通过ODBC连接到SQL Server 2008 Express的本地安装。 起初,我很难让它连接,因为即使在ODBCpipe理器中将我的本地SQL服务器添加为服务器DSN后,我仍然得到这个错误:

[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application 

我在Stack Overflow上询问了这个问题,并得到了答案。 回想起来,我应该在这里问这个问题,但是我得到了答案,所以我不在乎。 (另外,我绝对不喜欢三部曲网站分裂的事实,但这是另一回事…)

无论如何,使用%windir%\ sysWOW64 \ odbcad32.exe设置数据源之后,我似乎取得了一些进展。 我不再收到上面列出的错误。 相反,我正在看到一个更为邪恶的错误,就是这个错误:

点击放大

在我刚刚得到一个简单的PHPexception之前。 现在我的PHP脚本完成了相当于segfaulting,因为它显然挂在这个64位ODBC驱动程序上。 帮帮我! 连接到一个SQL Server应该是一个相对简单而直接的任务,所以我需要做些什么来使事情工作?


更新:我开始赏金,因为我真的需要让SQL Server和PHP很快互相交谈。 一个海报build议我检查事件日志,但没有显示任何内容,另一个海报build议我启用失败的请求追踪,我已经做了,但我不太确定它提供任何说明。 它提供的错误跟踪的副本可以在这里find(只有IE浏览器)。 我也有这里显示的(非常基本的)PHP脚本。 我已经把连接的名字改成“MYCOMPUTER”,把特定数据库/目录的名称改为“MyDatabase”,并且隐藏了密码,但没有做任何其他更改。

一点背景:

  • 我的电脑被称为MYCOMPUTER(不是真的,但想到这一点)
  • MYCOMPUTER运行64位Windows 7旗舰版与IIS 7.5
  • MYCOMPUTER安装了PHP 5.3.1(32位)通过FastCGI处理
  • MYCOMPUTER安装了64位SQL Server Express 2008
  • 默认的SQL实例称为MYCOMPUTER \ SQLEXPRESS
  • 有一个名为MyDatabase的数据库(同样,名称实际上是不同的)
  • 有一个名为MYCOMPUTER的系统DSN(使用32位ODBCpipe理器进行设置)
  • 有一个名为MYCOMPUTER64的系统DSN(使用64位ODBCpipe理器进行设置)

如果我尝试连接到我链接到的脚本MYCOMPUTER,我得到那个大的可怕的500错误。 如果我尝试在同一脚本中连接到MYCOMPUTER64,则会出现上面列出的“架构不匹配”错误。 无论哪种方式,它不工作。 我需要它的工作。 请帮忙。

我发现,如果你看看PHP + ODBC的错误方式,当使用IIS7它给你一个通用的500.获得500错误的“0”是额外的乐趣。

我有这种感觉,当你从PHP代码方面做到这一点时,你可能会更快地导致我们的错误(现在你已经知道你的驱动问题了)。

PHPInfo是否按预期工作?

在引用的PHP脚本之外,它失败了什么? 如果你没有别的办法,只要把PHP标签里面的所有内容注释掉,看看它是否可以给你一个空白页面; 然后取消注释行和代码段(最后嵌套最后一个),直到find引起错误的那一行为止。

由于你的testing脚本很短,所以很容易,而且很快就会指出接下来要检查的东西。

HTH。

你有没有确保启用32位应用程序? 这可以在高级设置 – >常规下的网站应用程序池中find。

500 – 内部服务器错误是一个非常普遍的错误,意味着服务器configuration有一些问题。 错误代码:0x00000000的意思是“没有错误”,您可以启用Web站点上的失败的请求跟踪,并检查是什么原因造成的问题。

它看起来PHP处理程序不起作用。 你在http处理程序设置中检查了PHP扩展处理程序吗? 还请检查您的PHP处理程序的权限。

我已经在其他地方的build议,使用此命令使IIS运行为32位 –

  cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1 

– 但是我不能certificate它的功效。

我build议不要一致地命名一切。 找出哪台MYCOMPUTER出现错误可能非常困难,例如…

早先的build议来审查PHPinfo输出是一个很好的build议。 这将certificate在PHP进行ODBC交互之前,PHP是否正在工作。

为什么使用ODBC和DSN而不是PHP的原生SQL Server驱动程序?

这是连接到SQL Server数据库时可以做的最糟糕的事情。