加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

你能告诉PHP在发生错误时发送标题(如500)吗?

发布时间:2020-12-13 22:02:23 所属栏目:PHP教程 来源:网络整理
导读:在我当前的项目中,我使用正常的HTTP请求查询 PHP,但也通过AJAX查询,我有时返回JSON格式的数据,有时返回普通文本.发生错误时,在正常请求中,您会看到错误消息并可以对其执行某些操作.另一方面,对于AJAX请求,您无法确定是否收到错误或您想要的数据,因为它没有直
在我当前的项目中,我使用正常的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');
}

不幸的是,这不适用于所谓的“致命错误”,处理这些你必须使用像这样的愚蠢技巧

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...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读