使用PHP添加LDAP属性

时间:2012-04-16 09:07:05

标签: php ldap

无法确定向LDAP条目添加其他属性的正确语法。在验证时,我得到这个数组:

    Array
(
    [0] => Array
        (
            [cn] => Array
                (
                    [0] => Vit Kos
                )

            [shortname] => Array
                (
                    [0] => vit.kos
                )

            [uid] => Array
                (
                    [0] => vit.kos
                )

            [mail] => Array
                (
                    [0] => vit.kos@email.com
                )

            [objectclass] => Array
                (
                    [0] => top
                    [1] => person
                    [2] => organizationalPerson
                    [3] => inetOrgPerson
                    [4] => dominoPerson
                )

            [givenname] => Array
                (
                    [0] => Vit
                )

            [userpassword] => Array
                (
                    [0] => password here
                )

            [sn] => Array
                (
                    [0] => Kos
                )

            [localadmin] => Array
                (
                    [0] => CN=#SysHQAdmin
                )

            [mailaddress] => Array
                (
                    [0] => Vit.Kos@email.com
                )

            [maildomain] => Array
                (
                    [0] => EMAIL
                )           


            [dn] => CN=Vit Kos,OU=###,O=EMAIL
        )

)

需要获得一个额外的属性成员

Array (
        [uid] => Array
            (
                [0] => vit.kos
            )

        [mail] => Array
            (
                [0] => vit.kos@email.com
            )
       [member] => Array
            (
                [0] => MEMBER HERE
            )
)

之前从未使用过LDAP,这对我来说非常困惑。谢谢你的回答。

1 个答案:

答案 0 :(得分:2)

要将数据分配给上面检索的目录项,您将使用ldap_modify()执行“修改”操作。这假设您的数据库模式允许在此对象上使用名为member的属性 - 它可能不会,您不能简单地将属性添加到任何对象中。当您感觉到它时。

首先,您需要创建属于member属性的条目,并将它们存储在数组中:

$member = array (
  0 => "This is some data",
  1 => "This is some more data"
);

为了告诉目录我们要修改哪个对象,我们需要它的DN。我们可以从您之前的搜索/列表/读取操作的结果中得到这个 - 您显示已经检索到的数组(我假设它存储在名为$array的变量中):

$dn = $array[0]['dn'];

现在我们拥有执行修改操作所需的所有信息(我假设您的连接/绑定LDAP资源保存在名为$ds的变量中):

$result = ldap_modify($ds, $dn, array('member'=>$member));

在此之后,$result将是一个布尔值,指示操作是否成功。如果不成功,您可以通过调用:

获得一条错误消息,解释原因
$error = ldap_error($ds);