2

在一页上,我正在执行多个 AJAX 调用。所有调用都成功返回响应,但最后一个(与其他 ajax 调用无关)返回 500 内部服务器错误作为响应代码(如 firebug 所说)。但是,尽管有错误代码,但该 AJAX 调用仍会返回正确的内容。

令我惊讶的是,当我将 php.ini 中的 display_errors 选项设置为 On 时,错误消失并在页面上呈现响应。我已将错误记录设置到文件中,但没有记录与上述内部服务器错误相对应的错误。

顺便说一句,我正在使用 Apache、JQuery、PHP5、APC(如果相关)。

4

6 回答 6

3

鉴于可用信息有限,最可能的答案是 PHP在完成回显您的预期输出后遇到了致命错误。

测试:在最后执行的行中,回显一些内容。如果那个回显没有出现,那么你就知道你的 PHP 脚本在某个地方停止了。那时,这只是调试和跟踪的问题。

于 2009-07-26T09:08:51.107 回答
2

我有这个完全相同的问题,原来是一个隐藏的致命错误。打开 display_errors,查找错误,粉碎错误,关闭 display_errors(可能最好在开发时保持 display_errors 开启,在生产中关闭)。

于 2014-06-11T18:37:47.600 回答
2

这很奇怪......您是否使用了某种库或您未编写的其他代码,这些代码可能会独立于实际返回值影响状态代码标头?

于 2009-07-26T08:10:09.557 回答
0

该问题通常由以下方法之一解决。检查脚本的权限、权利和所有权。如果在ajax调用后返回,请检查是否没有致命错误。检查您是否不小心以 ASCII 模式将文件上传到 Unix。

更多信息可以在http://www.larshemel.com/forum/500_internal_server_error阅读

于 2010-08-10T16:05:53.773 回答
0

我遇到了一些类似的问题,问题是脚本抛出异常并且没有 catch 块,因此异常会浮出水面并发生致命错误“未捕获的异常”。这是标准的 php 行为,但在一台特定的服务器上,您还将获得 500 内部服务器错误而不是 200 OK 的响应代码。删除异常并用 die() 语句替换它们修复了该服务器上的问题(我们可以这样做,因为它是一个简单的脚本,实际上并没有从一开始就从异常中受益)

于 2009-10-28T18:19:25.900 回答
0

PHP 解释器在这一请求期间简单地崩溃。我知道可能导致 PHP 崩溃的一个潜在原因:

由于 GCC 4.3 中的一些错误,使用此版本编译器编译的 PHP 的异常实现被破坏。在一些不平凡的情况下,脚本抛出异常会导致段错误并终止脚本执行。该论文在几个月前得到了 PHP 团队的确认。

要验证它是否发生在您身上,您可以简单地检查脚本执行在哪里崩溃,如果在抛出异常之后发生,您就在家。可以通过die()在脚本中进一步放置来完成检查,看看会发生什么。另一种方法是使用declare(ticks=1)并注册一个刻度函数,该函数将每个刻度的最后一个条目保存debug_backtrace()到文件中,以便您获得脚本如何执行的报告。

于 2009-07-26T08:39:30.027 回答