【问题标题】:Which types of errors should stop the system, in released php web system?在发布的 php web 系统中,哪些类型的错误应该停止系统?
【发布时间】:2012-09-27 09:19:17
【问题描述】:

在开发 php web 系统时,将 E_ALL | E_STRICT 设置为 error_reporting 并处理包括通知错误在内的所有类型的错误是一种很好的做法。

但是在发布的系统中,发生通知错误时我应该停止系统吗?

或者我应该仅在发生 E_ERROR 时停止系统并忽略所有其他错误,例如 E_WARNING、E_NOTICE 或 E_STRICT?

我应该在我的自定义错误处理程序中处理哪些类型的错误并停止(退出)系统?

【问题讨论】:

  • 警告绝对应该停止系统(但不要留下原始的错误/异常处理程序,编写自己的不泄露任何错误信息的处理程序)。较小的错误级别不太确定,但您至少应该记录它们并将报告邮寄给自己 - 这将激励您修复它们:)
  • @DCoder 感谢您的好建议!你能告诉我为什么在 E_WARNING 发生时你应该停止系统吗?
  • 在大多数情况下,正确性比高可用性更重要,“快速失败”比“无论如何继续前进”更可取。警告通常意味着事情真的出了问题,继续前进只会让事情变得更糟。考虑这个网站上最常见的问题 - "mysql_fetch_ expects parameter..., boolean given"。如果您没有在第一次警告时停止脚本,您将获得一长串重复警告,甚至可能通过在进一步处理中使用失败查询的结果来弄乱其他数据。
  • @DCoder 感谢您的评论。当出现警告时,我将停止我的系统。

标签: php


【解决方案1】:

当您开发代码时,您应该注意任何警告,包括通知。

对于生产,您不应该真正停止错误。相反,您可以使用set_error_handler() 管理任何错误,例如E_USER_ERRORE_USER_WARNINGE_USER_NOTICE。将客户端重定向到自定义页面,针对任何类型的错误显示自定义消息。重点是不要留下默认的错误信息。

您应该始终拥有一个系统来报告您在生产服务器上遇到的任何错误(通过电子邮件等),并尽快处理它们。

php.net/set_error_handler 上,您有很多示例可以让您的生活更轻松,并帮助您跟踪错误和警告。

【讨论】:

  • 感谢您提供有用的信息!在 php.net/set_error_handler 中的所有错误处理程序示例中,当 E_WARNING(不是 E_USER_WARNING)发生时,不要调用 exit。您认为您不需要在 E_WARNING 发生时向用户显示错误屏幕或消息并停止(退出)系统吗?
  • 这是你的决定,警告不需要exit,它们只是警告(未定义的索引、不推荐使用的函数等......)
猜你喜欢
  • 1970-01-01
  • 2012-08-28
  • 2013-02-10
  • 2015-01-01
  • 2011-10-07
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 2011-04-06
相关资源
最近更新 更多