我的代码中有一个 LDAP 服务器请求。我打开一个连接ldap_connect并检查返回的描述符是否有效,然后我ldap_search使用打开的描述符发出搜索请求。但有时由于网络故障或其他原因,ldap_search失败并发出警告Search: Can't contact LDAP server。
在我的生产服务器上,我将所有警告视为致命错误,因此整个页面呈现失败。
我应该只是在前面加上ldap_search并@检查返回的值(我现在也检查它)还是有更好的方法来处理这个?
我的代码中有一个 LDAP 服务器请求。我打开一个连接ldap_connect并检查返回的描述符是否有效,然后我ldap_search使用打开的描述符发出搜索请求。但有时由于网络故障或其他原因,ldap_search失败并发出警告Search: Can't contact LDAP server。
在我的生产服务器上,我将所有警告视为致命错误,因此整个页面呈现失败。
我应该只是在前面加上ldap_search并@检查返回的值(我现在也检查它)还是有更好的方法来处理这个?
就我个人而言,我同意你的看法,只需将 a 推到@那里并手动检查错误情况 - 我这样做是为了mysql_connectandMemcache->connect以及我所做的任何fsockopen调用,因为这也可以允许诸如“在死前再试几次”之类的事情。
但是,我敢肯定大多数疯子会告诉您永远不要使用@,而应该使用自定义错误处理程序。所以……由你决定!
您可以通过设置自己的错误处理程序将警告变成异常。只需捕获所有警告并在回调中抛出异常。这样您就不必处理不需要的输出,但有机会恢复(将用户引导到临时错误页面),这是您无法处理致命错误的。
有时,外部资源会引发警告,并且还允许您检查是否发生错误(例如 mysqli。)在这种情况下,您可以使用 忽略警告@,但请确保检查是否发生错误。
我不会仅仅压制警告,而不确保以其他方式处理它。用户想知道为什么会出错,特别是如果情况只是暂时的。
作为旁注:我认为 php 中的警告是一个荒谬的概念。代码要么失败,要么没有。如果它失败了,我希望能够处理它,而不是跳过箍。请给我一个例外!