LDAP_add с PHP: ошибка операций

#php #active-directory #ldap

#php #active-directory #ldap

Вопрос:

Я совсем новичок в использовании LDAP (на самом деле это мой первый проект), и я не могу найти ответ в Google, который мог бы мне помочь… Итак, моя проблема в том, что я пытаюсь добавить контакт с php в active directory на сервере Windows 2003. Я могу подключиться к серверу, и у меня также нет проблем с ldap_bind. Но когда я запускаю программу, я всегда получаю ошибку:

Предупреждение: ldap_add() [function.ldap-add]: Добавить: Ошибка операций в (Blabla) строке bla

и ldap_error также говорит только «Ошибка операций», что довольно расплывчато, поэтому я даже не знаю, проблема ли это с сервером или с моим кодом. Я видел несколько потоков с аналогичными проблемами, когда серверы не разрешали анонимный доступ, но я даже привязываюсь к учетной записи администратора, и это все еще не работает.

Мой код очень похож на этот:

 $ldapcon=ldap_connect("servername");

if($ldapcon) {
    $bind=ldap_bind($ldapcon,"Admin@domain.com", "somePassword");
    if($bind) {         
        //  create data...
        $info=array();
        $info["cn"][0]          = "Hans Mustermann";
        $info["sn"][0]          = "Mustermann";
        $info["givenName"][0]   = "Hans";
        $info["mail"][0]        = "MustermannH@firma.de";
        $info["objectclass"][0] = "top";
        $info["objectclass"][1] = "person";
        $info["objectclass"][2] = "organizationalPerson";
        $info["objectclass"][3] = "contact";
        $info["ou"][0]          = "Users";
        $info["ou"][1]          = "contact";

        // add Data...
        $r=ldap_add($ldapcon, "cn=Hans Mustermann, sn=Mustermann", $info)
            or die(ldap_error($ldapcon)); //error: operations error
    }
}
  

Отсутствует ли какая-либо информация? неверен ли код? нужны ли мне какие-либо изменения в настройках ad? это проблема с «настройкой удаленных прав» или что-то еще?
Я просто слишком глуп и слеп, чтобы увидеть проблему, или это нечто большее, что нелегко исправить?
У кого-нибудь из вас есть идея?

Большое спасибо, Чилликарли

Комментарии:

1. Я думаю, вам следует заменить $ ad на $ ldapcon

2. О, извините, проблема была не в этом, я просто забыл изменить это при вставке кода :/

3. ldap_bind и ldap_error также используют переменную $ad, это тоже опечатка?

4. о, нет. да, это так. Я больше не очень сосредоточен, так как я действительно устал исправлять эту глупую проблему. извините. надеюсь, теперь я исправил все опечатки

5. в чем именно заключается ошибка?

Ответ №1:

Вместо условия or die() вы могли бы попробовать это

 // add Data...
if(!(ldap_add($ldapcon, "cn=Hans Mustermann, sn=Mustermann", $info))) {
     echo "There is a problem to create the accountn";
     echo "Please contact your administrator !n";
     echo "LDAP Error: ".ldap_error($ldapcon)."n";
     exit;
}
ldap_unbind($ldapcon);
  

Комментарии:

1. да, возможно, это выглядит намного приятнее для пользователя, но это все равно не решает мою проблему, поскольку фактическое сообщение об ошибке такое же и не приносит никакой дополнительной информации. проблема в том, что ldap_add вообще не работает.

2. Можете ли вы добавить запись вручную со всей информацией / полями, установленными так, как они есть в PHP?