ldap_add(): Добавить: ошибка нарушения класса объекта

#php #ldap #opends

#php #ldap #открывается

Вопрос:

Когда я пытаюсь добавить атрибут к OpenDS через PHP, я получаю следующую ошибку:

ldap_add(): Добавить: нарушение класса объекта

Пожалуйста, помогите.

Вот мой код

 <?php
$ldapconfig['host'] = 'PC100';
$ldapconfig['port'] = 1389;
$ldapconfig['basedn'] = 'dc=company,dc=com';

$ds=ldap_connect($ldapconfig['host'], $ldapconfig['port']);

$password=1;
$username="cn=Directory Manager";

if ($bind=ldap_bind($ds, $username, $password)) {
  echo("Login correct");
  ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); // IMPORTANT
  $dn = "cn=roshan1,dc=example,dc=com"; 
  //$newuser["objectclass"] = "inetOrgPerson"; 
  //$newuser["cn"] = "new1"; 
  //$newuser["sn"] = "user"; 

  $ldaprecord['cn'] = "roshan1";
  $ldaprecord['givenName'] = "mkljl";
  $ldaprecord['sn'] = "roshan";
  $ldaprecord['objectclass'] = "inetOrgPerson";    
  $ldaprecord['mail'] = "lkl@fh.com";
  $ldaprecord['mmmm'] = "77878";

  // add data to directory
  $r = ldap_add($ds, $dn, $ldaprecord);

} else {

  echo("Unable to bind to server.</br>");

}
?>
  

Если я удалю $ldaprecord['mmmm'] = "77878"; из кода, он будет работать нормально. Как я могу добавить новый атрибут, подобный этому?

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

1. Пожалуйста, предоставьте какой-нибудь код. Эта ошибка может возникнуть при попытке задать некоторые свойства объекту, который не является членом класса с заданными свойствами… В LDAP ваш объект должен быть членом класса, в котором реализованы эти свойства.

2. Спасибо за ваш ответ, я изменил свой пост, пожалуйста, посмотрите его

Ответ №1:

Хм, похоже, вы пытаетесь установить только objectclass в inetOrgPerson , но вам нужно установить также другие верхние классы, из которых inetorgPerson расширяется — это было бы top и person возможно…

Итак:

 $ldaprecord['cn'] = "roshan1";
$ldaprecord['givenName'] = "mkljl";
$ldaprecord['sn'] = "roshan";
$ldaprecord['objectclass'][0] = "top";
$ldaprecord['objectclass'][1] = "person";
$ldaprecord['objectclass'][2] = "inetOrgPerson";
$ldaprecord['mail'] = "lkl@fh.com";
$ldaprecord['mmmm'] = "77878";
  

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

1. это не проблема, проблема в том, что когда я добавляю $ ldaprecord [‘mmmm’] = «77878»; возникает ошибка в строке кода, как я мог бы добавить дополнительный атрибут, подобный этому

2. Хорошо, это может быть связано с тем, что это свойство не реализовано ни в одном классе LDAP… Попробуйте использовать какое-либо существующее свойство inetOrgPerson… попробуйте посмотреть здесь: oav.net/mirrors/LDAP-ObjectClasses.html

3. спасибо за ответ, есть ли какая-либо возможность создать мой собственный атрибут класса inetOrgPerson

4. Возможно, после прочтения этого: opends.org/wiki/page/… Вы должны иметь возможность создать свой собственный objectclass (например, расширение от inetOrgPerson), который будет иметь пользовательские свойства…

5. снова проблема с opends теперь я хотел бы сохранить unicode в каталоге opends, его можно сохранить, но когда я извлекаю результаты, символы unicode отображаются не так, как есть