php - 动态网站出现未知错误时的最佳实践?

标签 php error-handling user-interface

我有一个 PHP 站点(和所有其他站点一样)有一些隐藏的错误。问题是发生错误时应该怎么办?

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

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

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

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

最佳答案

PHP 在 E_ERRORE_WARNING 级别的消息之间存在差异(在许多其他消息中,但它们可能是最常见的两种)。在 PHP 的默认行为中,E_ERROR 级别的错误将停止脚本的所有进一步执行,而 E_WARNING 级别的警告只会在继续之前抛出。

PHP Manual 中所述,这是有原因的;一般来说, fatal error 就是这样,你不应该尝试继续执行脚本,即使使用自定义错误处理程序是可能的。 fatal error - 希望 - 非常罕见,但当确实抛出 fatal error 时,我认为最好的做法是终止并向用户显示一个清晰、有意义的错误。

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

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

TL;DR 版本:坚持 PHP 的默认行为,但始终将错误处理程序更改为更直观的内容。

编辑:我误读了部分问题,并没有真正理解“未知”部分。不过,我的回答仍然有效;只要错误不是致命的(即不会完全中断脚本的流程),就没有理由停止执行。不过,确实会影响脚本其余部分的错误(即阻止查询所有内容的数据库错误)应该作为 E_ERROR 级别处理。

关于php - 动态网站出现未知错误时的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1491332/

相关文章:

php - 动态数据透视表的问题

php - 如何使用 Composer 设置文件加载顺序?

java - Java错误->实际和形式参数/IContext/使用-Xlint重新编译

python - 测试 GUI 代码 : should I use a mocking library?

php - PHP中 "include"的性能成本是多少?

php - 将 DOMNodes 从一个 DOMDocument 复制到另一个

assembly - 尝试退出程序时调用错误

python : ZeroDivisionError: float division by zero

Java Swing : Allow scroll when textfields are out out of range of scrollpane's view

java - 将标签与文本字段对齐