伙计们,在一个页面上我正在做多个AJAX调用。 所有调用都成功返回响应,但最后一个(与其他ajax调用无关)返回500个内部服务器错误作为响应代码(如萤火虫告诉)。 但是,尽pipe有错误代码,但是从该AJAX调用返回正确的内容。
令我惊讶的是,当我将PHP.ini中的display_errors选项设置为On时,错误消失并在页面上呈现响应。 我已经设置错误日志logging到文件,但没有错误logging对应于上述内部服务器错误。
顺便说一下,我使用的是Apache,JQuery,PHP5,APC(如果是相关的)。
caching在Linux服务器上的内存“免费”?
Windows Apache2.2 PHP5 PHPMailer错误
Htaccess重写URL来哈希锚在主页上
为什么Apache没有启动XAMPP
Apache Mod将所有传入的URL重写为https:// www
内部错误500 Apache,但在日志中没有?
在.htaccess中的数字库转换
考虑到现有的有限的信息,最有可能的答案是PHP 在完成了预期输出的回应之后发生了致命的错误。
要测试:在最后执行的行中,回显一些东西。 如果这个回显没有显示,那么你知道你的PHP脚本正在停止。 在这一点上,这只是一个调试和跟踪的问题。
这是非常奇怪的…你正在使用某种类型的库或其他代码, 你没有写可能会影响状态代码头独立于实际的返回值?
我有这个完全相同的问题,原来是一个隐藏的致命错误。 打开display_errors,找到错误,粉碎错误,关闭display_errors(可能最好保持display_errors开发和关闭生产)。
在这个请求中,PHP解释器只是崩溃。 我知道一个可能导致PHP崩溃的原因:
由于GCC 4.3中有一些bug,使用这个版本的编译器编译的PHP会破坏异常的执行。 在一些不平凡的情况下,通过脚本引发异常会导致段错误,脚本执行被终止。 几个月前,这个论文被PHP团队证实了。
为了验证它是否发生在你身上,你可以简单地检查脚本执行崩溃的地方,如果在抛出异常之后发生,你就在家。 可以通过将die()进一步放在脚本中进行检查,看看会发生什么。 另一种方法是使用declare(ticks=1)并注册一个tick函数,该函数将debug_backtrace()的最后一项从debug_backtrace()中保存到文件中,以便得到一个报告,脚本是如何执行的。
我有一些类似的问题,问题是脚本抛出异常,并没有catch块,所以异常将冒泡到表面和致命的错误“未捕获的异常”发生。 这是标准的PHP行为,但在一个特定的服务器上,你也会得到响应代码500内部服务器错误,而不是200 OK。 删除异常,并用die()语句替换它们修复了该服务器上的问题(我们可以这样做,因为它是简单的脚本,实际上并没有从异常中受益)
这个问题通常由以下几点来解决。 检查脚本的权限,权限和所有权。 如果在ajax调用之后返回,请检查是否没有任何致命错误。 检查你是否不意外地把文件上传到ASCII模式的Unix上。
更多信息可以阅读http://www.larshemel.com/forum/500_internal_server_error