如何让 php 在遇到致命异常时返回 500?

2022-08-30 08:56:05

PHP 致命错误将作为状态代码 200 返回到 HTTP 客户端。如何使其返回状态代码 500(内部服务器错误)?


答案 1
header("HTTP/1.1 500 Internal Server Error");

答案 2

这正是我昨天遇到的问题,我找到了如下解决方案:

1)首先,你需要捕获PHP致命错误,这是错误类型E_ERROR。当发生此错误时,脚本将存储错误并终止执行。您可以通过调用函数error_get_last())来获得存储的错误。

2) 在脚本终止之前,将始终调用回调函数 register_shutdown_function()。因此,您需要通过此函数注册错误处理程序才能执行所需的操作,在这种情况下,返回标头 500 和自定义的内部错误页(可选)。

function my_error_handler()
{
  $last_error = error_get_last();
  if ($last_error && $last_error['type']==E_ERROR)
      {
        header("HTTP/1.1 500 Internal Server Error");
        echo '...';//html for 500 page
      }
}
register_shutdown_function('my_error_handler');

注意:如果要捕获以E_USER*开头的自定义错误类型,可以使用函数set_error_handler()来注册错误处理程序并按函数trigger_error触发错误,但是,此错误处理程序无法处理E_ERROR错误类型。请参阅有关错误处理程序 php.net 的说明


推荐