У меня проблема с подключением ldap.
$hostname="ldap://sub.domain.com"; $ds=ldap_connect($hostname, 389); ldap_set_option ($ds, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP opt referrals'); ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version'); if ($ds) { $dn = "OU=Users,OU=ro,DC=sub,DC=domain,DC=com"; if (!($ldapc=ldap_bind($ds))) { echo "<p>Error:" . ldap_error($ds) . "</p>"; echo "<p>Error number:" . ldap_errno($ds) . "</p>"; echo "<p>Error:" . ldap_err2str(ldap_errno($ds)) . "</p>"; die; } $attributes = array("sn"); $filter = "(sn=*)"; $result = ldap_search($ds, $dn, $filter, $attributes); echo $result; $info = ldap_get_entries($ds, $result); for ($i=0; $i < $info["count"]; $i++) { echo $info[$i]["ou"][0]; } } else { echo "<h4>Unable to connect to LDAP server</h4>"; } ldap_unbind($ds);
Ldap любое анонимное соединение работает, потому что я проверяю его в браузере AD, и все в порядке. В этом коде он останавливается на
ldap_search($ds, $dn, $filter, $attributes);
Я получаю предупреждение:
Предупреждение: ldap_search (): Поиск: Операционная ошибка в .. \ index.php в строке 38
Я не знаю, что может быть причиной этой ошибки, я ценю вашу помощь.
Чтобы получить это от оставшегося без ответа списка:
Я нашел проблему, была проблема связывания. Сервер принимает анонимную привязку, но не поиск. И с пользователем и проходом работал, но я делал ошибку. Для пользователя я рассматривал только имя пользователя Windows, а не все местоположение из AD, теперь оно работает.
Если бы эта проблема, но я был правильно связан с пользователем, которому было разрешено искать.
Я решил это, установив эту опцию для работы с активным каталогом:
ldap_set_option($connection, LDAP_OPT_REFERRALS, 0);