代码点火器:如果出错,如何不显示不完整的页面

时间:2015-07-31 06:54:54

标签: php codeigniter

1)我有一个触发通知级别错误

的视图(一个neseted)

2)我已经设置了一个自定义错误处理程序,它被调用。代码低于

3)我希望访客看到只发生"错误发生"他的浏览器中的字符串,他看到附加了此错误消息的半生不熟的页面

4)弄乱php的原生ob_end_clean只让我清楚了解所涉及的最深层视图的内容,但更高级别的视图仍然显示为半显示

5)CI_Ouput类的final_output var的内容在出错时是空字符串。奇怪的是CI被称为预先缓冲输出到客户端的所有内容。

基本上,我需要的似乎是丢弃迄今为止收集的所有内容并仅用错误消息替换它。

我该怎么办?

处理程序的代码:

function _error_handler($errno, $errstr) {
    echo "error happened";
    die();
}

2 个答案:

答案 0 :(得分:0)

尝试使用Try Catch系统?

Try{
//Do something
} catch(Exception $e){
echo "Error has occured!";
}

答案 1 :(得分:0)

正如讨论中所建议的,这必须与php的本机输出缓冲相关,我们可以用ob_ *函数族来控制它们。在php中缓冲可以嵌套,CI似乎使用它,为每个正在加载的视图打开一个缓冲区。 如果我们从视图内部加载视图,嵌套会变得更深,通常,当视图中出现错误时,我们不知道它们有多深。

这似乎解决了问题(错误处理程序的代码):

function _error_handler($errno, $errstr) {

    $currentLevel=ob_get_level();
    for($i=0; $i<$currentLevel-1; $i++) {
        ob_end_clean();
    }

    print "errorrrr!";
    die();

}

因此它会检测它的深度并根据需要清除尽可能多的缓冲区。毕竟,我们最终得到了错误&#34; errorrrr&#34;消息是页面上唯一的内容。