Luk*_*kas 3 php error-handling
在我当前的项目中,我使用正常的HTTP请求查询PHP,但也通过AJAX查询,我有时返回JSON格式的数据,有时返回普通文本.发生错误时,在正常请求中,您会看到错误消息并可以对其执行某些操作.另一方面,对于AJAX请求,您无法确定是否收到错误或您想要的数据,因为它没有直接显示 - 您只是遇到麻烦,因为您的应用程序将无法再运行.
所以我想到了一个错误处理系统.我最好的想法是在发生错误时发送一个500"内部服务器错误"标题,所以在我的JS中,当我发送一个AJAX-Request时,我可以简单地检查错误并处理它.
不幸的是,PHP本身并没有发送那种标题(就像你有一个解析错误,或者代码中的某些内容出错).
你能:
a)如果发生错误,告诉PHP发送类似500的标题?或者
b)使用set_error_handler发送500头,然后调用PHP常规错误处理?或者
c)当您发生PHP错误时,您可以以任何其他方式发送错误标头吗?
我更喜欢使用Exceptions来处理错误.首先,您需要安装错误到异常的错误处理程序(http://php.net/manual/en/class.errorexception.php,示例1),然后将主应用程序代码包装在try-catch块中并发送catch部分中的适当头.例如:
try {
$myApplication->run();
} catch(Exception $e) {
// log or otherwise register the error
header('HTTP/1.1 500 Internal Server Error');
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不适用于所谓的"致命错误",处理这些你必须使用像这样的愚蠢技巧
ob_start();
register_shutdown_function(function() {
$p = ob_get_contents();
if(preg_match('~Fatal error~', $p))
header('HTTP/1.0 500 Internal Server Error');
});
...your code...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4994 次 |
| 最近记录: |