如果出现PHP错误,如何让Apache发送500?

hek*_*mgl 7 php apache error-handling http-status-codes http-headers

我正在开发一个PHP应用程序,它使用HTTP响应代码进行通信以及响应主体.所以这是PHP代码中的典型场景:

try {
    doSomething();
}
catch (Exception $e) {
    header('HTTP/1.1 500 Internal Server Error');
}
Run Code Online (Sandbox Code Playgroud)

...而客户端中的典型代码如下所示:

switch(responseCode) {
     case 200 :
         // all fine
         // ....
     case 500 :
         // trouble!
 } 
Run Code Online (Sandbox Code Playgroud)

这很酷,只要PHP代码中捕获到每个错误.

问题:如果由于PHP代码中的任何原因发生未被捕获的错误或语法错误等无法捕获的错误,Apache将发送200 OK.但我不想说500内部服务器错误.也许每个.htaccess左右.

Álv*_*lez 2

当然,您可以编写自己的错误处理程序。然而,并非所有 PHP 错误都是可捕获的。例如,语法错误甚至不允许您的代码运行,包括错误处理程序。

要处理可捕获的错误,您可以使用auto_append_fileauto_prepend_file指令来放置错误处理代码。

不可捕获的错误是另一个问题。如果 PHP 作为Fast CGI运行,它将自动为您生成 500 状态代码。但是,您可能正在通过其他一些 SAPI(例如 Apache 模块)运行 PHP。对此一无所知,抱歉。(如果我发现什么,我会报告。)