捕获 PHP 致命错误
2022-08-30 21:44:00
我有一个启用了 restful 的网站服务站点,因此其他网站/ajax 脚本可以调用该站点来获取/设置数据。但是,每当 Web 服务网站以某种方式返回 PHP 致命错误时,返回的 HTTP 状态将是 200 而不是 500。有没有办法修复它,以便每当发生致命错误时,返回500而不是200?或者,如果不可能,如何更改客户端以识别 Web 服务返回的致命错误?
我有一个启用了 restful 的网站服务站点,因此其他网站/ajax 脚本可以调用该站点来获取/设置数据。但是,每当 Web 服务网站以某种方式返回 PHP 致命错误时,返回的 HTTP 状态将是 200 而不是 500。有没有办法修复它,以便每当发生致命错误时,返回500而不是200?或者,如果不可能,如何更改客户端以识别 Web 服务返回的致命错误?
PHP 确实在出现致命错误时发送 HTTP 500。
让我引用这个PHP错误报告中的注释(xdebug错误阻止了这种行为):
它确实发生了。它要求:
1) display_errors = off
2) 在错误发生
时尚未发送任何标头 3) 此时状态为 200。
<?
ini_set('display_errors', 0);
foobar();
// This will return a http 500
?>
您可以使用关机功能捕获致命错误,并error_get_last:
register_shutdown_function(function() {
$lastError = error_get_last();
if (!empty($lastError) && $lastError['type'] == E_ERROR) {
header('Status: 500 Internal Server Error');
header('HTTP/1.0 500 Internal Server Error');
}
});
一种可能的方法是将默认响应设置为 500,如果所有操作都成功执行,则将响应设置为 200:
http_response_code(500);
render_my_page();
http_response_code(200);