【问题标题】:PHP Exceptions redirected to custom error pagePHP 异常重定向到自定义错误页面
【发布时间】:2011-06-30 21:55:04
【问题描述】:

如果我写的函数不能完成它们的工作,它们就会抛出异常。对于生产环境,我想将异常重定向到一个漂亮的错误页面。因此,我正在考虑在每个脚本的开头设置异常处理程序set_exception_handler。错误页面如何知道发生了哪个错误?我想将错误代码放入 URL 中,例如 header("Location: error.php?code=1234")。虽然在开发阶段我只是不会设置异常处理程序,因此每个异常都会打印到 php 默认错误屏幕 Uncaugt Exception: ... 以及所有有用的信息。

我已阅读Exceptions in PHP - Try/Catch or set_exception_handler?,但不知道如何编写前端控制器脚本,并且认为这可能需要付出很多努力。

我是一个 PHP 初学者,喜欢以正确的方式处理错误,但我只是不确定我这样做是对还是错。您认为按照上述方式进行操作是否可以,或者您有其他建议吗?

谢谢!

【问题讨论】:

    标签: php exception error-handling


    【解决方案1】:

    不要重定向。在您的异常处理函数中,只需在该点输出错误页面(或包含一个包含错误页面 HTML 的 PHP 文件)。您还想设置适当的状态码(使用 PHP 标头函数)。

    编辑:为什么不重定向:

    • 您希望在错误页面上返回适当的 HTTP 状态代码(通常为 404、403、400、500 或 503,具体取决于原因),以便搜索引擎机器人知道不对错误进行索引,爬虫可以识别损坏的页面,浏览器知道不缓存页面等等。如果您重定向,您将返回 301/302 HTTP 状态代码,而不是错误代码之一。
    • 您希望用户能够在出现错误时刷新页面,以防出现临时故障。如果您将他们重定向到另一个 URL,无论他们刷新多少次,他们总是会看到您的错误页面(因为那是他们所在的页面)。

    【讨论】:

    • 感谢您的意见。您能否告诉我您的经验,重定向到错误页面有什么问题?找到Centralized Error / Exception handling in PHP的文章,作者使用了重定向方法。
    • 我在回答中添加了解释。
    【解决方案2】:

    说实话,我认为现在担心这种事情还为时过早。

    现在只热衷于掌握 OOP,因为稍后您将(并且可能必须)使用 MVC 框架,它会为您捕获所有错误/异常。看看 symfony:在开发环境中它会显示异常和堆栈跟踪,但在生产环境中。它会吐出一个漂亮的、可自定义的错误页面。

    我的意思是:不要重新发明轮子,看看其他人是如何解决类似问题的。最好使用他们的解决方案(但也要记住理解它们)。

    【讨论】:

    • 感谢您的回答!我从 symfony 那里听说过,并且前段时间也安装了它,但从未有效地使用它。我不想重新发明轮子,但对于我正在从事的项目,我认为这是一种矫枉过正。不使用它的主要原因是我必须先学习它(不幸的是没有时间)。
    【解决方案3】:

    你认为这样做可以吗 上面描述的或者你有其他的 建议?

    不,我认为这不是一个好的解决方案。您不想对出现的每个问题都使用金锤。某些异常的处理方式应与其他异常不同。此外,可能需要在代码的一部分中以不同于另一部分的方式处理特定异常。我建议set_exception_handler 作为最后的手段,处理那些由于某种原因未被正确捕获的异常,然后继续编写 try/catch 以更精细地处理事情。

    【讨论】:

    • 我会记住这一点。首先,如果出现问题,我会尝试通过抛出异常来实现整个功能。稍后,如果实现了整个功能,我会注意细节和错误情况。感谢您的回答!
    猜你喜欢
    • 2017-10-27
    • 2013-04-11
    • 1970-01-01
    • 2014-07-23
    • 2022-10-12
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多