【发布时间】:2012-11-30 11:38:39
【问题描述】:
如果出现 php 致命错误(用于处理 AJAX 请求),我试图弄清楚如何将 HTTP 状态标头设置为 500。
相关问题:How can I get php to return 500 upon encountering a fatal exception?
我不想使用register_shutdown_function,我认为这不是一个优雅的解决方案。
下面的代码是一个好的解决方案吗?
它是否总是适用于致命错误?
我假设应用程序代码在最后一次 echo 调用之前没有输出,并且没有对 flush() 函数的调用(调用后会阻止修改标头)。
<?php
set_status_code(500);
// ...
// (application code with no output)
// Application didn't crash up to this point,
// so we set http status code 200.
set_status_code(200);
echo $outputBuffer;
flush() 是唯一破坏预期行为的函数吗?
【问题讨论】:
-
..为什么会出现致命错误?
-
如果 PHP 彻底崩溃,Apache(或您选择的网络服务器)应该自动返回 500。
-
@deceze 这是 Xdebugs 错误。禁用后它就可以工作了(related)。
-
我同意@MrCode。我认为明确设置错误 500 是不好的做法。当您遇到致命的服务器错误时,应生成 500 错误——即服务器软件已崩溃、配置错误或由于某种原因无法运行。它不应用作已运行而未崩溃的软件的错误代码。与 MrCode 一样,我更喜欢在您的 Ajax 响应中使用响应代码,但如果您必须使用 HTTP 响应代码,则 400 范围的错误代码比 500 代码更合适。
-
如果程序还在运行,那么这个错误不是致命的。根据定义,如果您的程序能够设置 http 代码,那么代码 500 并不合适。
标签: php