为什么不在生产中启用Symfony调试工具?

时间:2014-04-16 17:01:25

标签: php debugging symfony exception exception-handling

我经常发现将php错误转换为将回调注册到set_error_handlerregister_shutdown_function的异常非常有用,所以我决定试一下更实际的解决方案,即Symfony Debug组件。但是,他们警告introduction page

  

您永远不应在生产环境中启用调试工具,因为它们可能会向用户披露敏感信息。

启用调试组件基本上意味着调用Symfony\Component\Debug\Debug::enable(),然后调用registers an error handler and an exception handler。这也让开发人员选择$displayErrors,这意味着

  

是显示错误(用于开发)还是仅记录它们(用于生产)

所以可以简单地register some custom logger并在生产中安全地使用调试器,不是吗?

我真的很想开始使用这个组件安全地管理php中的错误情况,因为我开始重新发明轮子,写一些非常接近的东西(当然质量除外:D),但是这个建议不要在生产中使用它让我有点担心:你认为它会产生什么样的问题?

顺便说一句,显示错误意味着:$exceptionHandler = set_exception_handler('var_dump');,所以在开发过程中设置$displayErrors并在生产中将其关闭,保持出错的安全性应该非常好处理程序将所有错误捕获为异常并将其记录下来。

那么你如何在生产中使用这个组件(如果你这样做的话)?

2 个答案:

答案 0 :(得分:0)

我认为您不应该“[使用]此组件来安全地管理php中的错误情况”。 基本上,你得到的这些例外并不意味着被抓住。它们应该立即修复,并阻止开发直到你这样做。在过去,您可以在同一页面上收到数百条通知,并忽略它们,因为您的错误报告级别太低了。

您可以在代码中捕获的异常是所有其他异常,不会从php错误转换。其他所有东西都需要修复,最好是在开发过程中。如果在生产中发生这样的错误,它不能减慢执行速度或显示调试信息,这就是我认为它被禁用的原因。

答案 1 :(得分:-1)

我认为DebugClassLoader::enable();内的Debug::enable()不应在生产中调用。

除此之外,带有错误和异常处理程序的函数的第一部分在生产中应该没问题。