Ошибка ldap_search (): успех

Это мой код:

$objLDAP = ldap_connect($_POST['host']);
$dn      = "OU=Users,DC=office,DC=example,DC=com";
if ($objLDAP)
{
ldap_set_option($objLDAP, LDAP_OPT_REFERRALS, 0);
ldap_get_option($objLDAP,LDAP_OPT_REFERRALS,$error);
print_r($error."<br/>");
ldap_set_option($objLDAP, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_get_option($objLDAP,LDAP_OPT_PROTOCOL_VERSION,$error);
print_r($error."<br/>");

$objBind = ldap_bind($objLDAP);
print_r($objBind."<br/>");

$sr = ldap_search($objLDAP, $dn, "sn=*","sn") or die("Error in search query: ".ldap_error($objLDAP));
print_r($sr."<br />");
print_r(ldap_error($objLDAP)."<br />");

$info = ldap_get_entries($objLDAP, $sr);
print_r($info["count"]);
print_r(ldap_error($objLDAP));
exit();
}

Где $ _POST [‘host’] является допустимым именем хоста, а $ dn также является допустимым деревом. Однако, когда я запускаю программу, я получаю

0
3
1
успех
Ошибка в поисковом запросе: успех

Если я использую ldap_errno, то получаю «Ошибка в поисковом запросе: 0».

Может кто-нибудь помочь мне получить более значимую информацию о том, почему я не могу получить информацию $?

Спасибо.

РЕДАКТИРОВАТЬ:
Все еще отлаживаю. Если я изменю строку на:

$sr = ldap_search($objLDAP,$dn,"(dn=*)") or die("Error in search query: ".ldap_error($objLDAP);

Тогда я получаю

Ошибка в поисковом запросе: ошибка операций

Но минуту, которую я добавляю в четвертый аргумент:

$sr = ldap_search($objLDAP,$dn,"(dn=*)","") or die("Error in search query: ".ldap_error($objLDAP);

Тогда я получаю:

Ошибка в поисковом запросе: успех

ДРУГОЕ РЕДАКТИРОВАНИЕ:
Основываясь на комментарии ниже, я взял or die() и просто продолжил выполнение программы. Но я все еще не получаю никаких данных в $ info.

Код:

    ldap_set_option($objLDAP, LDAP_OPT_REFERRALS, 0);
ldap_get_option($objLDAP,LDAP_OPT_REFERRALS,$error);
print_r($error.": LDAP_OPT_REFERRALS<br/>");
ldap_set_option($objLDAP, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_get_option($objLDAP,LDAP_OPT_PROTOCOL_VERSION,$error);
print_r($error.": LDAP_OPT_PROTOCOL_VERSION<br/>");

$objBind = ldap_bind($objLDAP);
print_r($objBind.": objBind<br/>");
print_r(ldap_error($objLDAP).": ldap_bind error<br/>");
$sr = ldap_search($objLDAP,"OU=Users,DC=office,DC=example,DC=com","(sn=*)","");
print_r($sr.": search result<br />");
print_r(ldap_error($objLDAP).": ldap_search error<br />");
$info = ldap_get_entries($objLDAP, $sr);
print_r($info["count"].": number of entries returned<br />");
print_r(ldap_error($objLDAP.": ldap_get_entries error<br />"));
exit();

Результат:

0: LDAP_OPT_REFERRALS
3: LDAP_OPT_PROTOCOL_VERSION
1: objBind
Успех: ошибка ldap_bind
: результат поиска
Успешно: ошибка ldap_search
: количество возвращенных записей

0

Решение

Это не столько вопрос LDAP, сколько вопрос PHP.

Ваше заявление ldap_search() or die(), Но что это делает:

or die() вызывает смерть сценария, если часть перед or является false, Но ldap_search не возвращает логическое значение, а ресурс. А благодаря динамической природе PHP этот ресурс автоматически преобразуется в false, Так что даже если ваш поиск вернет что-то полезное, вы будете всегда врезаться в or die()-часть.

Я думаю, что вы хотите сделать что-то вроде следующего:

$sr = ldap_search($objLDAP, $dn, "sn=*","sn");
if (ldap_errno($objLDAP)) {
print_r($sr."<br />");
print_r(ldap_error($objLDAP)."<br />");
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]