2013-08-28 2 views
1

Я использую ldap_connect для работы с сервером LDAP из приложения PHP, которое отлично работает. Теперь мне нужно установить таймауты, чтобы запрос был отменен, если он длится долго. Для этого я установить следующие параметры со следующими строками кода: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(), какой вариант установить - его значение никогда не должно меняться. Значение 1 в ldap_set_option($ldapconn, LDAP_OPT_TIMELIMIT, 1); - это значение, которое вы устанавливаете для LDAP_OPT_TIMELIMIT.

С возвращением ваших звонков в ldap_set_optionTRUE похоже, что они работают правильно. Вы можете подтвердить свою установку с помощью 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

okay - я нашел причину: у ldap_search есть свой собственный параметр таймаута, который перезаписывает параметр ldap_connect. –

Смежные вопросы