当前位置:  开发笔记 > 编程语言 > 正文

抓住PHP致命错误

如何解决《抓住PHP致命错误》经验,为你挑选了2个好方法。

我有一个启用了restful的Web服务站点,因此其他网站/ ajax脚本可以调用该站点来获取/设置数据.但是,每当Web服务站点以某种方式返回PHP致命错误时,返回的HTTP状态为200而不是500.是否有办法修复它,以便每当发生致命错误时,返回500而不是200?或者,如果不可能,我如何更改我的客户端以识别Web服务返回的致命错误?



1> Benjamin Cre..:

PHP 在致命错误上发送HTTP 500.
让我引用这个PHP错误报告中的注释(xdebug错误可以防止这种行为):

它确实发生了.它要求:

1)display_errors = off
2)在错误发生时尚未发送标头
3)此时状态为200.


您可以使用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');
    }
});


我不会这样,如果你启用了xdebug,它将使用它自己的错误处理程序覆盖它,它似乎也返回一个HTTP 200.

2> Ben Rowe..:

一种可能的方法是将默认响应设置为500,如果一切成功执行,则将响应设置为200:

http_response_code(500);
render_my_page();
http_response_code(200);


抛入一个大的页面缓冲区,以防止有关已经开始的输出的臭名昭着的错误,应该这样做.
还有一个PHP功能请求打开:http://bugs.php.net/bug.php?id = 50921
推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有