Jef*_*y04 14 php http-status-codes
我有一个启用了restful的Web服务站点,因此其他网站/ ajax脚本可以调用该站点来获取/设置数据.但是,每当Web服务站点以某种方式返回PHP致命错误时,返回的HTTP状态为200而不是500.是否有办法修复它,以便每当发生致命错误时,返回500而不是200?或者,如果不可能,我如何更改我的客户端以识别Web服务返回的致命错误?
Ben*_*mer 31
PHP 会在致命错误上发送HTTP 500.
让我引用这个PHP错误报告中的注释(xdebug错误可以防止这种行为):
它确实发生了.它要求:
1)display_errors = off
2)在错误发生时尚未发送标头
3)此时状态为200.
<?
ini_set('display_errors', 0);
foobar();
// This will return a http 500
?>
Run Code Online (Sandbox Code Playgroud)
您可以使用shutdown函数和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');
}
});
Run Code Online (Sandbox Code Playgroud)
Ben*_*owe 13
一种可能的方法是将默认响应设置为500,如果一切成功执行,则将响应设置为200:
http_response_code(500);
render_my_page();
http_response_code(200);
Run Code Online (Sandbox Code Playgroud)