繁体   English   中英

在动态网站上发生未知错误时的最佳做法?

[英]Best practices when an unknown error occurs on a dynamic website?

我有一个PHP站点(与其他每个站点一样)有一些隐藏的错误。 问题是发生错误时会发生什么?

我看到很多PHP和其他网站,如果出现错误,页面有点坏,有时甚至会将内部错误消息转储到页面,但通常网站仍然部分可用。

我遵循的另一种方法是立即终止页面呈现并向用户显示错误消息。

您认为哪种用户更友好? 无论错误如何,让应用程序继续运行,以便页面的某些部分仍然可以呈现并可用? 或者立即终止控制流程,因为向用户显示半生不熟的页面更糟糕,应该显示正确的错误消息?

更新:当找到页面时,它不是404页面,而是关于这些情况,但在生成页面时会出现问题。

PHP在E_ERRORE_WARNING级别的消息之间有所不同(在许多其他消息中,但这些消息可能是最常见的2)。 在PHP的默认行为中, E_ERROR级别错误将停止脚本的所有进一步执行,而E_WARNING级别警告将仅在继续之前抛出。

正如PHP手册中所解释的那样,这是有原因的; 通常,致命错误就是这样,并且您不应该尝试继续执行脚本,即使可能使用自定义错误处理程序。 致命错误 - 希望 - 非常罕见,但是当一个人被抛出时,我认为最好的做法是终止并向用户显示一个明确的,有意义的错误。

警告值得采用不同的方法; 因为它们不是致命的并且不会终止执行,所以您应该只记录错误,或者显示一个小警告,指示用户无法正确显示页面的哪个部分,并继续运行您的脚本。

我建议不要向用户显示PHP的默认错误/警告消息。 它们不专业,丑陋,可能会让更多恶意用户深入了解您网站的数据库和文件结构。

TL; DR版本:坚持PHP的默认行为,但总是将错误处理程序更改为更加明显的东西。

编辑:我误读了部分问题,并没有真正得到'未知'部分。 我的回答仍然存在; 只要错误不是致命的(即不会完全破坏脚本的流程),就没有理由停止执行。 但是,影响脚本其余部分的错误(即阻止查询所有内容的数据库错误)应该像处理E_ERROR级别一样处理。

我喜欢让服务器处理所有404和500,503等...并自动将用户指向一个带有糟糕的漂亮页面! 站点导航完整的消息,以便他/她可以从那里导航。 另外,我喜欢添加一个返回按钮(javascript history.go(-1):人们对这种方法有着复杂的感觉

如果您不知道如何添加apache服务器错误重定向只需查看http://onlamp.com/onlamp/2003/02/13/davidsklar.html

好吧无论如何,当定义出现未知错误时,它是未知的。 所以你不应该自动知道该做什么。

最好的方法是显示一个很好的错误消息(每个框架都支持在出现错误时显示特定内容)。

发送自己的电子邮件,以便跟踪这些错误并纠正错误当然是您应该做的事情。

这是一个普遍的问题,不仅限于PHP。

你永远不应该展示一个半生不熟的页面。 如果页面有错误导致用户无法使用(原因无关紧要),则必须显示错误页面。 如果页面有您已经考虑过的错误 - 比如您无法获得的RSS提要 - 那么请继续并显示页面的工作部分。

另一方面,如果处理中出现错误 - 再次,原因无关紧要 - 您向用户指出并让他们重试。

在Ruby on Rails中,我们随时准备在处理错误(包括验证问题)后重新显示页面。 但是,如果渲染出现问题,则会显示错误页面。

这是常识,但请记住99%的错误在起源中是未知的(由统计数据组成,但基本上是正确的)但是优秀的软件可以优雅地(从用户的角度)对这些错误作出反应。

我非常喜欢Django框架实践,将“内部错误”页面和电子邮件回溯和其他调试信息显示给我。 这可能是让我解决问题的最佳方法。 (特别是当它不易再现时。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM