2013-08-28 72 views
1

我使用ldap_connect從PHP應用程序使用LDAP服務器,它工作正常。 現在我需要設置超時,以便一個請求將被取消,如果它運行很長。 爲此,我設定的下列代碼行以下選項:ldap_set_option沒有設置超時選項

$ldapconn = ldap_connect($ldap['host'], $ldap['port']) 
      or myExClass::throwException("unable to connect"); 
echo LDAP_OPT_TIMELIMIT; 
ldap_set_option ($ldapconn, LDAP_OPT_TIMELIMIT,1); 
ldap_set_option ($ldapconn, LDAP_OPT_NETWORK_TIMEOUT,1); 
echo LDAP_OPT_TIMELIMIT; 

echo的插入進行調試。在這個例子中,我發現,選項LDAP_OPT_TIMELIMIT不變4.前後ldap_set_option

爲什麼該選項沒有改變? 可能是什麼原因?順便說一句:ldap_set_option的返回碼在兩種情況下都是1。

回答

2

LDAP_OPT_TIMELIMIT是一個標誌,用於告訴ldap_set_option()設置哪個選項 - 其值不應該改變。在ldap_set_option($ldapconn, LDAP_OPT_TIMELIMIT, 1);中的1是您爲LDAP_OPT_TIMELIMIT設置的值。

由於您撥打ldap_set_option返回TRUE這聽起來像是他們正常工作。您可以用ldap_get_option()驗證您的設置:

if(ldap_get_option($ldapconn, LDAP_OPT_TIMELIMIT, $retVal)) { 
    echo $retVal; 
} else { 
    echo "Uh oh. Couldn't retrieve value for LDAP_OPT_TIMELIMIT."; 
} 
+0

哦,對不起,我的錯誤。我應該使用'ldap_get_option($ ldapconn,LDAP_OPT_TIMELIMIT,$ retVal)'來獲取這個特定選項的當前值,而不是'echo LDAP_OPT_TIMELIMIT;'我只能得到這個選項的內部「數字」。所以在這種情況下,該選項設置正確,但長時間運行的請求仍未取消。 :-( –

+0

好吧 - 我發現原因:ldap_search有其自己的超時參數,它會覆蓋ldap_connect選項。 –