如何向用户显示捕捉到的错误,避免这些常见的陷阱


How to display caught errors to users avoiding these common pitfalls?

如果你的网站发现了一个异常,你想将其作为反馈报告给用户,那么有什么优雅的方法可以在不遇到这些问题的情况下处理它:

  1. 错误发生在页面的中间,如果您在被捕获时直接打印错误消息,它将位于断开的页面中间的某个位置。

  2. 使用ob_start()可以确保只在处理完内容后打印内容,并且没有错误,在1)处修复了问题,但它会带来最好避免的性能问题。

  3. 在发现错误后重定向到新的URL或同一个URL可以很好地工作(例如,如果用户发布了错误的密码,则重定向回登录表单,并发送错误消息,或者重定向到普通页面以查看更严重的应用程序崩溃错误)。这使您容易出现重定向错误链(递归),这将使请求超时,最终用户或开发人员根本没有明确的错误消息。因此,总是重定向错误,尤其是应用程序崩溃错误,似乎是个坏主意。

  4. 我注意到在我的项目中使用ob_clean()WITHOUT ob_start()是有效的,删除了页面上已有的回声内容。但是php手册指出,如果没有ob_start(),它就不应该工作,甚至不应该只清除缓冲区上的HTML。这是怎么回事?

  5. 您可以将所有的print/echo语句保存在$array=array()中,而不是ob_start。据我所知,性能打击较小,但这可能会使代码难以处理。

    感谢的帮助

我所做的是,我有一个索引,其中包括所需的页面,因此,例如,如果您想查看联系人页面,您可以请求index.php?page=contact

代码看起来像这个

$return_code = 1;
$return_code = include($page.'.php');
if ($return_code != 1) {
    echo '<div class="error">'.$return_code.'</div>';
}

在你的联系人页面中,你可以做任何你需要做的事情,如果出现错误,你想停止执行页面并只显示错误,只需返回

<?php
// If an error happens, simply
return "Error text";
?>