PHP异常重定向到自定义错误页面

时间:2011-06-30 21:55:04

标签: php exception error-handling

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

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

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

谢谢!

3 个答案:

答案 0 :(得分:2)

说实话,我觉得现在为你担心这类事情还为时过早。

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

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

答案 1 :(得分:2)

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

修改:为什么不重定向:

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

答案 2 :(得分:1)

  

你认为这样做是否正常   上面描述或你有其他   建议?

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