在一个页面上,我正在进行多个AJAX调用。所有调用都成功返回响应,但最后一个调用(与其他ajax调用无关)返回500内部服务器错误作为响应代码(如firebug所述)。但是,尽管存在错误代码,但从该AJAX调用返回了正确的内容。
令我惊讶的是,当我将php.ini中的display_errors选项设置为On时,错误消失并在页面上呈现响应。我已将错误记录设置为文件,但未记录与上述内部服务器错误相对应的错误。
顺便说一句,我使用的是Apache,JQuery,PHP5,APC(如果它是相关的)。
答案 0 :(得分:3)
鉴于可用信息有限,最可能的答案是PHP在完成回显预期输出后达到致命错误。
测试:在最后执行的行中,回显一些东西。如果没有显示回声,那么您就知道您的PHP脚本正在停止某个地方。那时,只需要调试和跟踪。
答案 1 :(得分:2)
这很奇怪......您使用某种类型的库或其他您没有编写的代码,这些代码可能会影响状态代码标题而与实际返回的值无关吗?
答案 2 :(得分:2)
我有同样的问题,原来是一个隐藏的致命错误。打开display_errors,查找错误,粉碎错误,关闭display_errors(最好保持display_errors开启以进行开发,然后关闭生产)。
答案 3 :(得分:0)
PHP解释器在这一个请求期间简单地崩溃。我知道一个可能导致PHP崩溃的潜在原因:
由于GCC 4.3中的一些错误,使用此版本的编译器编译的PHP实现了异常。在某些非平凡的情况下,脚本抛出异常会导致段错误并终止脚本执行。几个月前,PHP团队证实了这篇论文。
要验证,是否发生在您身上,您可以简单地检查脚本执行崩溃的位置,如果在抛出异常后发生,您就在家。可以通过在脚本中进一步放置die()
并查看,会发生什么来完成检查。另一种方法是使用declare(ticks=1)
并注册一个tick函数,将每个tick的debug_backtrace()
的最后一个条目保存到文件中,这样你就可以得到一个报告,如何执行脚本。
答案 4 :(得分:0)
我有一些类似的问题,问题是脚本抛出了异常并且没有catch块,所以异常会冒泡到表面并发生致命错误“未捕获的异常”。这是标准的PHP行为,但在一个特定的服务器上,你也会得到500内部服务器错误而不是200 OK的响应代码。删除异常并用die()语句替换它们修复了该服务器上的问题(我们可以这样做,因为它是一个简单的脚本,实际上并没有从异常中获益)
答案 5 :(得分:0)
问题通常由以下因素决定。 检查脚本权限,权限和所有权。 如果在ajax调用后返回,请检查是否存在致命错误。 检查你是否在ASCII模式下意外地将文件上传到Unix。
阅读更多信息