2014-02-12 80 views
1

這是我的代碼,它工作正常。PHP ldap_bind「exception」

$authenticated = ldap_bind($conn, $this->username . "@" . $servidor_dominio, $this->password); 

該函數的描述指定它返回bool。當用戶輸入用戶名和密碼不正確的組合,我從服務器得到一個錯誤:

Error 500. ldap_bind(): Unable to bind to server: Invalid credentials 

這確實是一個PHP的警告,但是它停止我的應用程序的執行。它甚至顯示了堆棧跟蹤頁面(我正在使用Yii PHP框架)。

我試圖捕捉例外把的ldap_bind()調用一個try/catch塊:

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

它沒有捕獲任何異常,我仍然得到同樣的錯誤:

Error 500 ldap_bind(): Unable to bind to server: Invalid credentials 

有人可以幫助我嗎?似乎我的用戶錯過了經常輸入其登錄憑據的類型;-)

回答

2

只需在ldap_bind前面放一個@符號,然後使用$ authenticated變量在用戶正確驗證後顯示回用戶。

$authenticated = @ldap_bind($conn, $this->username . "@" . $servidor_dominio, $this->password); 
+0

完美!!!它解決了它。你能解釋我這種行爲嗎?就我所知,「@」用於將參數傳遞給變量。我是對的? –

+0

PHP中的@符號簡單地抑制了該命令返回的任何錯誤消息。由於ldap_bind在不成功時返回false,因此除非您正在對其無法綁定的原因進行疑難解答,否則您確實不需要錯誤消息。 –

+0

簡單地抑制錯誤將解決眼前的問題,但不是根本原因。這很可能會在未來很難找到錯誤。 –

相關問題