PHP ldap_bind“异常”

Gab*_*pez 2 php ldap yii

这是我的代码,它正在正常工作。

$authenticated = ldap_bind($conn, $this->username . "@" . $servidor_dominio, $this->password);
Run Code Online (Sandbox Code Playgroud)

该函数的描述指定它返回 bool。当用户输入不正确的用户名和密码组合时,我从服务器收到错误:

Error 500. ldap_bind(): Unable to bind to server: Invalid credentials
Run Code Online (Sandbox Code Playgroud)

这确实是一个 PHP 警告,但它停止了我的应用程序的执行。它甚至显示堆栈跟踪页面(我正在使用 Yii PHP 框架)。

我尝试捕获异常,将 ldap_bind() 调用放入 try/catch 块中:

try {
    $authenticated = ldap_bind($conn, $this->username . "@" . $servidor_dominio, $this->password);
} catch (Exception $exc) {
    echo $exc->getTraceAsString();
}
Run Code Online (Sandbox Code Playgroud)

它没有捕获任何异常,但我仍然收到相同的错误:

Error 500 ldap_bind(): Unable to bind to server: Invalid credentials
Run Code Online (Sandbox Code Playgroud)

有人可以帮我弄这个吗?我的用户似乎经常错过输入他们的登录凭据;-)

Joe*_*yer 5

只需在 ldap_bind 前面放置一个 @ 符号,然后使用 $authenticated 变量向用户显示用户是否已正确进行身份验证。

$authenticated = @ldap_bind($conn, $this->username . "@" . $servidor_dominio, $this->password);
Run Code Online (Sandbox Code Playgroud)

  • PHP 中的 @ 符号只是抑制该命令返回的任何错误消息。由于 ldap_bind 在不成功时返回 false,因此您实际上不需要它的错误消息,除非您正在对它无法绑定的原因进行故障排除。 (2认同)