Start · Sprachen · PHP · Referenz · ldap_connect

ldap_connect

Funktion

Erzeugt eine LDAP-Verbindungsressource zu einem LDAP-Server und gibt ein <code>LDAP\Connection</code>-Objekt zurück.

seit PHP 4.0.0 Kategorie: misc

Signatur

ldap_connect(string|null $uri = null): LDAP\Connection|false

Beschreibung

ldap_connect() initialisiert eine Verbindung zu einem LDAP-Server und gibt ein LDAP\Connection-Objekt zurück, das für nachfolgende LDAP-Operationen wie ldap_bind(), ldap_search() oder ldap_modify() benötigt wird. Die eigentliche TCP-Verbindung wird dabei nicht sofort aufgebaut – das geschieht erst beim ersten tatsächlichen Vorgang (z. B. beim Binden).

Als Argument wird eine LDAP-URI im Format ldap://hostname:port oder ldaps://hostname:port übergeben. Das Präfix ldaps:// aktiviert eine verschlüsselte LDAP-Verbindung über SSL/TLS (LDAPS, standardmäßig Port 636). Soll STARTTLS verwendet werden, wird zunächst eine normale Verbindung aufgebaut und anschließend ldap_start_tls() aufgerufen.

Seit PHP 8.3 ist die frühere Signatur mit separaten Parametern $host und $port als veraltet markiert. Es sollte stets eine vollständige LDAP-URI verwendet werden. Seit PHP 8.1 gibt die Funktion ein LDAP\Connection-Objekt zurück anstelle einer Ressource.

LDAP eignet sich für die Anbindung an Verzeichnisdienste wie Active Directory, OpenLDAP oder LDAP-basierte Authentifizierungssysteme. Verbindungsoptionen wie Protokollversion oder Timeout können nach dem Verbindungsaufbau mit ldap_set_option() gesetzt werden.

Parameter

Name Typ Default Beschreibung
$uri string|null null Eine vollständige LDAP-URI, z. B. ldap://ldap.example.com, ldap://ldap.example.com:389 oder ldaps://ldap.example.com:636. Mehrere URIs können durch Leerzeichen getrennt übergeben werden. Bei null wird localhost auf Port 389 verwendet.

Rückgabewert

Typ
LDAP\Connection|false
Beschreibung
Gibt bei Erfolg ein LDAP\Connection-Objekt zurück (vor PHP 8.1 eine Ressource vom Typ ldap link). Gibt false zurück, wenn die LDAP-URI ungültig ist oder die Verbindung nicht initialisiert werden konnte.

Beispiele

Einfache LDAP-Verbindung mit anonymem Bind

<?php
$conn = ldap_connect('ldap://ldap.example.com');

if ($conn === false) {
    die('LDAP-Verbindung konnte nicht initialisiert werden.');
}

// Protokollversion auf LDAPv3 setzen
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);

// Anonymer Bind
if (ldap_bind($conn)) {
    echo 'Erfolgreich anonym verbunden.';
} else {
    echo 'Bind fehlgeschlagen: ' . ldap_error($conn);
}

ldap_unbind($conn);
Erfolgreich anonym verbunden.

Verbindung zu Active Directory mit Benutzer-Authentifizierung

<?php
$ldapUri  = 'ldap://ad.example.com:389';
$bindDn   = 'CN=ServiceUser,OU=Users,DC=example,DC=com';
$bindPass = 's3cr3tP@ssword';
$baseDn   = 'DC=example,DC=com';

$conn = ldap_connect($ldapUri);

if ($conn === false) {
    die('Ungültige LDAP-URI.');
}

ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($conn, LDAP_OPT_REFERRALS, 0);

if (!ldap_bind($conn, $bindDn, $bindPass)) {
    die('Bind fehlgeschlagen: ' . ldap_error($conn));
}

$filter = '(sAMAccountName=jdoe)';
$result = ldap_search($conn, $baseDn, $filter, ['cn', 'mail']);
$entries = ldap_get_entries($conn, $result);

if ($entries['count'] > 0) {
    echo 'Gefundener Benutzer: ' . $entries[0]['cn'][0] . PHP_EOL;
    echo 'E-Mail: ' . $entries[0]['mail'][0] . PHP_EOL;
} else {
    echo 'Kein Benutzer gefunden.';
}

ldap_unbind($conn);
Gefundener Benutzer: John Doe E-Mail: jdoe@example.com

Verschlüsselte Verbindung mit LDAPS

<?php
// LDAPS (Port 636) für verschlüsselte Übertragung
$conn = ldap_connect('ldaps://ldap.example.com:636');

if ($conn === false) {
    die('LDAPS-Verbindung fehlgeschlagen.');
}

ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);

// Zertifikatsvalidierung erzwingen (Produktivumgebung)
// ldap_set_option(null, LDAP_OPT_X_TLS_REQUIRE_CERT, LDAP_OPT_X_TLS_DEMAND);

if (ldap_bind($conn, 'cn=admin,dc=example,dc=com', 'adminpass')) {
    echo 'Sicher über LDAPS verbunden.';
}

ldap_unbind($conn);
Sicher über LDAPS verbunden.

// Wichtig · Fallstricke

Sicherheitshinweis: Verbindungen über ldap:// übertragen Daten unverschlüsselt, einschließlich Passwörter beim Bind. In Produktivumgebungen sollte stets ldaps:// oder STARTTLS (ldap_start_tls()) verwendet werden.

LDAP-Injection: Benutzereingaben, die in LDAP-Filtern oder DN-Ausdrücken verwendet werden, müssen mit ldap_escape() escapet werden, um LDAP-Injection-Angriffe zu verhindern.

Deprecation: Die alte Signatur ldap_connect(string $host, int $port) mit separatem Port-Parameter ist seit PHP 8.3 als veraltet (deprecated) markiert und wird in einer zukünftigen PHP-Version entfernt. Stets eine vollständige URI verwenden.

PHP 8.1: Ab PHP 8.1 gibt ldap_connect() ein LDAP\Connection-Objekt zurück. Code, der mit is_resource() prüft, muss auf instanceof LDAP\Connection umgestellt werden.