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

时间:2014-10-09 11:56:30

标签: php error-handling user-feedback

如果您的网站捕获了您想要作为反馈报告给用户的异常,那么处理它的优雅方法是什么,而不会遇到这些问题:

  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。据我所知,性能影响较小,但这可能会使代码难以处理。

    感谢帮助

1 个答案:

答案 0 :(得分:0)

我所做的是我有一个包含所需页面的索引,例如,如果您想查看联系页面,则需要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";
?>