【问题标题】:Can't catch Ldap_add exception无法捕捉 Ldap_add 异常
【发布时间】:2020-08-18 12:50:52
【问题描述】:

我是第一次使用LDAP,和PHP/symfony一起使用:我成功连接到LDAP服务器,可以搜索和添加用户/组,没什么大问题。 但是,当我尝试添加已存在的用户时,我收到以下警告:

HTTP 500 内部服务器错误

警告:ldap_add():添加:已经存在

我想抓住它,因为它会引发异常,并且可以用一个简单的 toast 替换为用户“失败:CN 已在使用中”。

但是,我找不到这样做的方法,并且不明白为什么 symfony 会引发这样一个异常,其中 ldap_add 应该只在失败时返回“false”。 (它确实在成功时返回 true):ldap_add manual

编辑:这是有罪的代码。选项没问题,新建用户时请求成功。

我尝试了几种方法来捕获错误,但似乎无法捕获警告

    try {
    $result = ldap_add($ldapconn, $userdn, $user);
    } catch(Throwable  $e) {
    echo $e->getMessage();
}

【问题讨论】:

  • 你能告诉我们你的代码吗?
  • 好的,已经更新了

标签: php symfony ldap


【解决方案1】:

默认情况下,Symfony 将警告转换为异常... 仅在开发环境中

这是一个聪明的选择,可以避免您的生产在生产中发生意外行为时爆炸。

如果发生错误,ldap_add 函数将返回 false。这就是你应该检查的。您可能想完全关闭警告,您可以改用@ldap_add

也就是说,这里有两种选择。

  1. 您可能希望使用 PHP Safe 库,它将警告转换为异常。这是一个例子:https://github.com/thecodingmachine/safe
  2. 你也可以临时设置你自己的错误监听器,它会抛出一个异常,实际上有时候 Symfony 会在它自己的代码库中这样做。下面是一个例子:https://github.com/symfony/symfony/blob/27d84dbe57ce65203b26232b87e6660fdba2f30e/src/Symfony/Component/String/AbstractString.php#L509 最重要的是不要避免恢复原来的错误处理程序。

希望能帮到你!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2012-12-14
    • 2012-01-10
    • 1970-01-01
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多