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_connect() 傳回的 LDAP\Connection 實例。

dn

LDAP 實體的識別名稱。

entry

controls

要與請求一起傳送的 LDAP 控制項陣列。

回傳值

成功時回傳 true,失敗時回傳 false

變更日誌

版本 說明
8.1.0 ldap 參數現在預期是 LDAP\Connection 實例;先前,預期是有效的 ldap link 資源
8.0.0 controls 現在可為 null;先前,預設為 []
7.3.0 新增了對 controls 的支援

參見

新增註解

使用者貢獻的註解 13 則註解

7
匿名
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 測試過了。
4
gsgleason at gmail dot com
9 年前
要移除特定屬性的所有值,請輸入一個空陣列。

例如,要從群組中移除所有成員

<?php
ldap_mod_del
($ldapconn,$groupDN,array("member" => array()));
?>
2
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);

?>
2
mark at cushman dot net
24 年前
我發現語法

$entry["mail"] = "";

不會使用 OpenLDAP 伺服器刪除 mail 屬性。您必須指定屬性值才能成功刪除,否則您會收到來自伺服器的「無效語法」錯誤。

如果您嘗試刪除的屬性在 schema 中沒有相等規則,則會顯示錯誤:「不適當的匹配」。我刪除屬性 facsimilieTelephoneNumber 時遇到問題,這是因為我的 core.schema 檔案沒有該屬性的 EQUALITY 定義。我複製了 telephoneNumber EQUALITY 規則,它就能完美運作。
0
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)));
}
0
thomas dot thiel at tapgmbh dot com
21 年前
請別忘記
當至少需要一個屬性時,您無法刪除所有屬性。
0
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 指定的項目中所有出現的屬性。
0
ral at royal dot net
23 年前
至少對於 OpenLDAP 1.2.x
要移除屬性而不論其值為何,您必須指派

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

在 ldap_mod_del($ds,$dn,$attrs) 之後
將移除所有出現的 AttributeName
0
ral at royal dot net
23 年前
要移除屬性的所有實例

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

ldap_mod_del($ds, $dn, $entry);
0
twopairs at solfy dot com
23 年前
<pre>
uid: testuser
mail: testuser@test.net
mail: testuser@somewhere.com
</pre>

如何移除 mail 的值,只留下第二個 mail 值?

<pre>
$entry["mail"] = "testuser@test.net";
$result = ldap_mod_del($connID, $dn, $entry);
</pre>

如果你想要移除一個屬性的所有實例.....
==>
<pre>
$entry["mail"][0] = "testuser@test.net";
$entry["mail"][1] = "testuser@somewhere.net";
$result = ldap_mod_del($connID, $dn, $entry);
</pre>

不是嗎?
0
sam_freund at yahoo dot com
24 年前
如果你不打算傳播你的 LDAP 資料庫,即使它會返回錯誤,使用空白字串的 ldap_modify 也是可行的。不過,我還是建議不要這樣做,因為這看起來像是未來版本會被修復的東西。
0
arimus at apu dot edu
24 年前
在搜尋了幾個小時,卻沒有找到任何關於 ldap_mod_del 函式有用的資訊後,我開始嘗試自己弄清楚「陣列條目」參數需要是什麼格式。以下是我找到的:

entry 陣列是一個雜湊,其中屬性名稱作為雜湊鍵,而你想要刪除的該屬性的特定值作為對應的雜湊值。

-- 範例

特定條目屬性的目前值

uid: testuser
mail: testuser@test.net
mail: testuser@somewhere.com

如何移除第一個 mail 的值,只留下第二個 mail 值?

$entry["mail"] = "testuser@test.net";
$result = ldap_mod_del($connID, $dn, $entry);

所以如果你想移除一個屬性的所有實例,你必須一個個地移除。
-3
arjanw at bigfoot dot com
24 年前
要移除一個屬性的所有實例,你可以使用 ldap_modify 並將該屬性的值設為空值。

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