我有一个PHP站点(与其他所有站点一样)有一些隐藏的错误。问题是发生错误时会发生什么?
我看到很多PHP和其他网站,如果出现错误,页面有点坏,有时甚至会将内部错误消息转储到页面上,但通常网站仍然可以部分使用。
我遵循的另一种方法是立即终止页面呈现并向用户显示错误消息。
您认为哪种用户更友好?无论错误如何,让应用程序继续运行,以便页面的某些部分仍然可以呈现并可用?或立即终止控制流程,因为向用户显示半生不熟的页面更糟糕,应该显示正确的错误消息?
更新:当找到页面时,它不是404页,而是关于这些情况,但在生成页面时会出现问题。
答案 0 :(得分:3)
PHP在E_ERROR
和E_WARNING
级别的消息之间有所不同(在许多其他消息中,但这些消息可能是最常见的2)。在PHP的默认行为中,E_ERROR
级别错误将停止脚本的所有进一步执行,而E_WARNING
级别警告将仅在继续之前抛出。
正如PHP Manual中所解释的那样,这是有原因的;通常,致命错误就是这样,并且您不应该尝试继续执行脚本,即使可能使用自定义错误处理程序。致命错误 - 希望 - 非常罕见,但当一个人被抛出时,我认为最好的做法是终止并向用户显示一个明确的,有意义的错误。
警告值得采用不同的方法;因为它们不是致命的并且不会终止执行,所以您应该只记录错误,或者显示一个小警告,指示用户无法正确显示页面的哪个部分,并继续运行您的脚本。
我建议不要永远向用户显示PHP的默认错误/警告消息。它们不专业,丑陋,可能会让更多恶意用户深入了解您网站的数据库和文件结构。
TL; DR版本:坚持PHP的默认行为,但总是将错误处理程序更改为更加明显的东西。
编辑:我误读了部分问题,并没有真正得到“未知”部分。我的回答仍然存在;只要错误不是致命的(即不会完全破坏脚本的流程),就没有理由停止执行。但是,影响脚本其余部分的错误(即阻止查询所有内容的数据库错误)应该像处于E_ERROR
级别那样处理。
答案 1 :(得分:0)
我喜欢让服务器处理所有404和500,503等...并自动将用户指向一个带有糟糕的漂亮页面!站点导航完整的消息,以便他/她可以从那里导航。另外我喜欢添加一个返回按钮(javascript history.go(-1):人们对这种方法的看法很复杂
如果你不知道如何添加apache服务器错误重定向只是检查出来 http://onlamp.com/onlamp/2003/02/13/davidsklar.html
答案 2 :(得分:0)
无论如何,当定义出现未知错误时,它是未知的。所以你不应该自动知道该怎么做。
最好的方法是显示一条漂亮的错误消息(每个框架都支持在出现错误时显示特定内容)。
发送自己的电子邮件,以便跟踪这些错误并纠正错误当然是您应该做的事情。
答案 3 :(得分:0)
这是一个普遍的问题,不仅限于PHP。
你永远不应该展示一个半生不熟的页面。如果页面有错误导致用户无法使用(原因无关紧要),则必须显示错误页面。如果页面有您已经考虑过的错误 - 比如您无法获得的RSS提要 - 那么请继续显示该页面的工作部分。
另一方面,如果处理中出现错误 - 再次,原因无关紧要 - 您向用户指出并让他们重试。
在Ruby on Rails中,我们随时准备在处理错误(包括验证问题)后重新显示页面。但是,如果渲染出现问题,则会显示错误页面。
这是常识,但请记住,99%的错误在起源中是未知的(由统计数据组成,但基本上是正确的)但是优秀的软件可以优雅地(从用户角度)对这些错误做出反应。
答案 4 :(得分:0)
我非常喜欢Django框架练习,向我展示“内部错误”页面和电子邮件回溯以及其他调试信息。这可能是让我解决问题的最佳方法。 (特别是当它不易再现时。)