PHP Conference Japan 2024

ldap_mod_del

(PHP 4, PHP 5, PHP 7, PHP 8)

ldap_mod_del从当前属性中删除属性值

描述

ldap_mod_del(
    LDAP\Connection $ldap,
    string $dn,
    array $entry,
    ?array $controls = null
): bool

从指定的 dn 中删除一个或多个属性值。对象删除由 ldap_delete() 函数完成。

参数

ldap

一个 LDAP\Connection 实例,由 ldap_connect() 返回。

dn

LDAP 实体的识别名称。

entry

controls

要与请求一起发送的 LDAP 控制 数组。

返回值

成功时返回 true,失败时返回 false

变更日志

版本 描述
8.1.0 ldap 参数现在期望一个 LDAP\Connection 实例;以前,期望一个有效的 ldap link 资源
8.0.0 controls 现在可以为空;以前,它默认为 []
7.3.0 添加了对 controls 的支持

参见

添加注释

用户贡献的注释 13 条注释

匿名
18 年前
对于任何有兴趣将用户从组中移除的人,您可以如下使用 ldap_mod_del()

$group = 'CN=mygroup,OU=myOU,DC=mydomain,DC=com';

$group_info['member'] = 'CN=User\, Test,CN=Users,DC=mydomain,DC=com';

ldap_mod_del($ldap, $group, $group_info);

我在 Win 2K3 服务器上的 Active Directory 上测试了此功能。
gsgleason at gmail dot com
9 年前
要移除所有特定属性,请将其提供一个空数组。

例如,要移除组中的所有成员

<?php
ldap_mod_del
($ldapconn,$groupDN,array("member" => array()));
?>
bart-holland at wedefo dot nl
11 年前
要从 Apple 的 Open Directory 中移除用户,您还需要移除为该组生成的 uid。

移除用户如下所示

<?php

// 设置变量
$ldapDN = "uid=myadmin,cn=users,dc=myserver,dc=com';
$ldapPass = "somepass";

$groupDn = 'cn=mygroup,cn=groups,dc=myserver,dc=com'
$removal = array(
"
memberuid"=>"username",
"
apple-group-memberguid"=>"846DE847-D73D-428D-83A8-B95B606C511B"
);

// 连接并绑定
$ldapconnect = ldap_connect("myserver.com",389);
ldap_bind(
$ldapconnect, $ldapDN, $ldapPass);

// 从组中移除成员
ldap_mod_del(
$ldapconnect, $groupDn, $removal);

// 解绑
ldap_unbind(
$ldapconnect);

?>
mark at cushman dot net
24 年前
我发现语法

$entry["mail"] = "";

不会使用 OpenLDAP 服务器删除邮件属性。您必须指定要删除的属性值才能成功删除它,否则您将从服务器收到“无效语法”错误。

如果要删除的属性在模式中没有相等规则,则会显示错误:“不合适的匹配”。我遇到了删除属性 facsimilieTelephoneNumber 的问题,这是因为我的 core.schema 文件没有为该属性定义 EQUALITY。我复制了 telephoneNumber EQUALITY 规则,它完美地工作了。
jonatam dot ribeiro at hotmail dot com
11 年前
我们经常需要删除“objectclass”,下面是一个简单的代码来成功移除它。

$userdataModifydelSamba = array();
$userdataModifydelSamba['objectClass'] = array();
$userdataModifydelSamba['objectClass'][0] = 'sambaSamAccount';

$userdataModifydelSamba['sambasid'] = array();
$userdataModifydelSamba['sambantpassword'] = array();
$userdataModifydelSamba['sambahomedrive'] = array();
$userdataModifydelSamba['sambadomainname'] = array();
$userdataModifydelSamba['sambaacctflags'] = array();
$userdataModifydelSamba['sambaprimarygroupsid'] = array();
$userdataModifydelSamba['sambapwdlastset'] = array();

$sucess = @ldap_mod_del($connection, $dn, $result);
if(!$sucess)
{
throw new Exception("error " . ldap_err2str(ldap_errno($connection)));
}
thomas dot thiel at tapgmbh dot com
21 年前
请不要忘记
当至少有一个属性是必需时,您无法删除所有属性。
JoshuaStarr at aelana dot com
22 年前
以上示例也已被证明适用于 iPlanet / Sun One Directory Server 5.0/5.1。例如

$attrs["mail"] = array();
ldap_mod_del($ldapConnID,$dn,$attrs);



$attrs["mail"] = array();
$attrs["telephonenumber"] = array();
ldap_mod_del($ldapConnID,$dn,$attrs);

这将删除由 dn 指定的条目中所有属性的所有出现。
ral at royal dot net
23 年前
至少在 OpenLDAP 1.2.x 版本中
要删除一个属性而不管其值,您必须赋值

$attrs["AttributeName"]=array();

在 ldap_mod_del($ds,$dn,$attrs) 之后
AttributeName 的所有出现都会被删除
ral at royal dot net
23 年前
要删除属性的所有实例

$entry["attrname"][]="value1";
$entry["attrname"][]="value2";
...
$entry["attrname"][]="valueN";

ldap_mod_del($ds, $dn, $entry);
twopairs at solfy dot com
23 年前
<pre>
uid: testuser
mail: [email protected]
mail: [email protected]
</pre>

如何删除 mail 的值,以便仅保留 mail 的第二个值

<pre>
$entry["mail"] = "[email protected]";
$result = ldap_mod_del($connID, $dn, $entry);
</pre>

如果您想删除属性的所有实例.....
==>
<pre>
$entry["mail"][0] = "[email protected]";
$entry["mail"][1] = "[email protected]";
$result = ldap_mod_del($connID, $dn, $entry);
</pre>

不是吗?
sam_freund at yahoo dot com
24 年前
如果您没有传播 LDAP 数据库,则使用带有空字符串的 ldap_modify 会起作用,即使它返回错误。尽管如此,我建议不要这样做,因为它预示着将来版本中会被修复的内容。
arimus at apu dot edu
24 年前
在搜索了几个小时并且没有找到关于 ldap_mod_del 函数的任何有价值的信息后,我开始自己尝试弄清楚“数组条目”参数需要采用什么格式。以下是我发现的内容

条目数组是一个哈希表,其中属性名称作为哈希键,要删除的该属性的特定值作为相应的哈希值。

-- 示例

特定条目的属性的当前值

uid: testuser
mail: [email protected]
mail: [email protected]

如何删除 mail 的第一个值,以便仅保留 mail 的第二个值

$entry["mail"] = "[email protected]";
$result = ldap_mod_del($connID, $dn, $entry);

因此,如果您想删除属性的所有实例,则必须逐个删除。
arjanw at bigfoot dot com
24 年前
要删除属性的所有实例,您可以使用 ldap_modify 并为该属性设置空值。

$entry["mail"] = "";
$result = ldap_modify($connID, $dn, $entry);
To Top