#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 отображаются не так, как есть