Signatur
Beschreibung
ldap_mod_add() ergänzt einen vorhandenen LDAP-Verzeichniseintrag (identifiziert durch seinen Distinguished Name $dn) um zusätzliche Attributwerte. Im Gegensatz zu ldap_mod_replace() werden dabei bestehende Werte nicht entfernt, sondern die neuen Werte werden zu den vorhandenen hinzugefügt. Das ist besonders nützlich, wenn ein Attribut mehrere Werte haben kann (z. B. mail oder memberUid).
Das Array $entry muss als assoziatives Array übergeben werden, bei dem jeder Schlüssel dem Attributnamen entspricht und der zugehörige Wert entweder ein einzelner Wert (String) oder ein Array von Werten ist. Alle Werte im Array werden dem Eintrag hinzugefügt.
Ab PHP 8.1.0 akzeptiert die Funktion als erstes Argument ein LDAP\Connection-Objekt anstelle einer resource. Der optionale Parameter $controls ermöglicht das Übergeben von LDAP-Server-Controls, um erweiterte Operationen zu steuern.
Die Funktion setzt eine aktive, authentifizierte LDAP-Verbindung voraus. Der verbundene Benutzer muss über ausreichende Schreibrechte auf dem Zieleintrag verfügen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ldap Pflicht | LDAP\Connection | Eine gültige LDAP-Verbindungsressource, die mit ldap_connect() erstellt und mit ldap_bind() authentifiziert wurde. |
|
| $dn Pflicht | string | Der Distinguished Name (DN) des LDAP-Eintrags, dem Attributwerte hinzugefügt werden sollen, z. B. uid=jdoe,ou=users,dc=example,dc=com. |
|
| $entry Pflicht | array | Assoziatives Array mit den Attributen und den hinzuzufügenden Werten. Jeder Schlüssel ist ein Attributname, der Wert ist ein String oder ein Array von Strings. | |
| $controls | array|null | null | Optionales Array mit LDAP-Server-Controls, die zusammen mit der Anfrage gesendet werden sollen. Wird null übergeben, werden keine Controls übermittelt. |
Rückgabewert
true zurück, wenn die Attributwerte erfolgreich hinzugefügt wurden. Bei einem Fehler (z. B. fehlende Berechtigungen, ungültiger DN oder Verbindungsproblem) wird false zurückgegeben.Beispiele
E-Mail-Adresse zu einem Benutzer hinzufügen
<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
$bindDn = 'cn=admin,dc=example,dc=com';
$bindPwd = 'geheimesPasswort';
if (ldap_bind($ldap, $bindDn, $bindPwd)) {
$dn = 'uid=jdoe,ou=users,dc=example,dc=com';
$entry = [
'mail' => 'john.doe.alias@example.com',
];
if (ldap_mod_add($ldap, $dn, $entry)) {
echo "E-Mail-Adresse erfolgreich hinzugefügt.";
} else {
echo "Fehler: " . ldap_error($ldap);
}
} else {
echo "Bind fehlgeschlagen.";
}
ldap_unbind($ldap);
?>
Benutzer einer Gruppe hinzufügen (Multi-Value-Attribut)
<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
$bindDn = 'cn=admin,dc=example,dc=com';
$bindPwd = 'geheimesPasswort';
if (ldap_bind($ldap, $bindDn, $bindPwd)) {
// DN der Gruppe, nicht des Benutzers!
$groupDn = 'cn=developers,ou=groups,dc=example,dc=com';
// Mehrere Mitglieder auf einmal hinzufügen
$entry = [
'memberUid' => ['jdoe', 'msmith'],
];
if (ldap_mod_add($ldap, $groupDn, $entry)) {
echo "Benutzer erfolgreich der Gruppe hinzugefügt.";
} else {
echo "Fehler: " . ldap_error($ldap);
}
}
ldap_unbind($ldap);
?>
// Wichtig · Fallstricke
Duplikate: Wenn der hinzuzufügende Wert bereits im Attribut vorhanden ist, schlägt die Operation mit einem LDAP-Fehler fehl (z. B. Attribute or value exists). Vor dem Aufruf sollte geprüft werden, ob der Wert bereits existiert.
Berechtigungen: Der bindende Benutzer muss Schreibrechte (Write-ACL) auf dem Zieleintrag besitzen. Ohne ausreichende Rechte gibt die Funktion false zurück, und ldap_error() liefert die genaue Fehlermeldung.
Typänderung in PHP 8.1: Ab PHP 8.1.0 erwartet der erste Parameter eine LDAP\Connection-Instanz anstelle einer resource. Code, der ältere PHP-Versionen unterstützen muss, sollte dies berücksichtigen.
Transaktionssicherheit: LDAP-Operationen sind nicht transaktional. Bei einem Fehler nach teilweisen Änderungen muss der Rollback manuell durchgeführt werden.