忽略(@)因外部因素而发生的错误是否好?

时间:2013-06-20 02:38:56

标签: php error-handling

我的代码中有一个LDAP服务器请求。我打开与ldap_connect的连接,并检查返回的描述符是否有效,但后来我使用开放描述符使用ldap_search发出搜索请求。但有时由于网络故障或其他因素导致ldap_search失败并显示警告Search: Can't contact LDAP server

在我的生产服务器上,我将所有警告视为致命错误,因此整个页面渲染失败。

我应该在ldap_search之前添加@,只检查返回的值(我现在也会检查)或者有更好的方法来处理这个问题吗?

2 个答案:

答案 0 :(得分:1)

就我个人而言,我同意你的意见,只需在@推送并手动检查错误情况 - 我为mysql_connectMemcache->connect以及任何fsockopen执行此操作我打电话,因为这也可以允许“在死前再尝试几次”之类的事情。

但是,我确信大多数坚果会告诉你,你永远不应该使用@而应该使用自定义错误处理程序。所以......由你决定!

答案 1 :(得分:1)

您可以按setting your own error handler将警告变为例外。只需捕获所有警告并在回调中抛出异常。这样你就不必处理不需要的输出,但有机会恢复(将用户引导到临时错误页面),这是你无法做出的致命错误。

有时外部资源会发出警告,并且还会让您检查是否发生了错误(例如,mysqli。)在这种情况下,您可以忽略@的警告,但请确保检查是否发生了错误

我不会压制警告,也不会确保以其他方式处理。用户想知道出现问题的原因,特别是如果情况只是暂时的。

作为旁注:我认为php中的警告是一个荒谬的概念。代码失败或者没有。如果它失败了,我希望能够处理它,而不是跳过篮球。请给我一个例外!