2013-07-19 7 views
14

Mam problem z połączeniem ldap.Błąd operacji 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 każde anonimowe połączenie działa, ponieważ testuję je w przeglądarce AD ​​i wszystko jest w porządku. W tym kodzie zatrzyma się

ldap_search($ds, $dn, $filter, $attributes); 

otrzymuję ostrzeżenie:

Ostrzeżenie: ldap_search(): Szukaj: Operacje w błędzie .. \ index.php on line 38

Naprawdę nie wiem, co może być przyczyną tego błędu, doceniam twoją pomoc.

+1

Nie można się zgubić ze zmiennym zakresem? $ dn (baza dn dla wyszukiwania) jest zdefiniowany jeden poziom poniżej wywołania ldap_search. Spróbuj echo (var_dump) parametrów wyszukiwania ldap tuż przed wywołaniem wyszukiwania, aby upewnić się, że wszystko jest w porządku lub włączyć sprawdzanie isset ($ dn). Lub po prostu zdefiniuj $ dn bezwarunkowo. –

+0

Parametry są w porządku, sprawdziłem je tuż przed wywołaniem wyszukiwania i to jest w porządku. Jeden problem, który moim zdaniem może być, jestem w intranecie, nie mam uprawnień administratora, więc nie mogę pisać w C. Skopiowałem archiwum xampp, nie zainstalowałem xampp na tym komputerze. Po pierwsze, nawet jeśli włączyłem rozszerzenie ldap z php.ini, to nie zadziałało, ponieważ nie mam jakiegoś pliku w C/windows/system. Kiedy je skopiowałem, wszystko działa, tak myślę. Czy instalacja może być problemem? –

+0

A co z używaniem narzędzia powłoki do sprawdzenia lub Apache DirectoryStudio (GUI klienta LDAP)? Nie musisz być administratorem lokalnym, aby go zainstalować/używać, w systemie Windows lub Workastation, cokolwiek. Spróbuj połączyć się i zapytaj o serwer LDAP z jakimkolwiek innym narzędziem niż PHP. –

Odpowiedz

16

Aby dostać go z listy bez odpowiedzi:


znalazłem problem, był problem powiązań. Serwer akceptuje anonimowe powiązanie, ale nie wyszukiwanie. I z użytkownikiem i przepustką zadziałało, ale popełniłem błąd. Dla użytkownika uważałem nazwę użytkownika de windows nie za całą lokalizację z AD, teraz działa.

+0

Dokładny ten sam problem dla mnie.Brak błędów anonimowego powiązania, ale "Ostrzeżenie: ldap_search(): Wyszukaj: Błąd operacji w .." podczas wyszukiwania. Dostarczenie poprawnego użytkownika AD/przepustki na wiązanie naprawiło wyszukiwanie. $ ldapbind = @ldap_bind ($ ldapconn, $ ldaprdn, $ hasło); – RobDigital

7

Wystąpił ten problem, ale zostałem prawidłowo powiązany z użytkownikiem, któremu zezwolono na wyszukiwanie.

Rozwiązałem go przez ustawienie tej opcji do pracy z aktywnym katalogu:

ldap_set_option($connection, LDAP_OPT_REFERRALS, 0); 
+0

To również mi pomogło: 'ldap_set_option ($ connection, LDAP_OPT_PROTOCOL_VERSION, 3);' – bgStack15