Verwendung der OpenLDAP-Erweiterung von PHP in ServBay 
ServBay ist eine leistungsstarke lokale Web-Entwicklungsumgebung, die zahlreiche Technologiestacks unterstützt. Für PHP-Entwickler, deren Anwendungen mit LDAP-Servern (Lightweight Directory Access Protocol) arbeiten müssen, bietet ServBay die PHP-OpenLDAP-Erweiterung vorinstalliert an – so können Sie diese schnell und unkompliziert aktivieren und verwenden. In diesem Leitfaden erfahren Sie, wie Sie die Erweiterung in Ihrer ServBay-Umgebung einsetzen, etwa für Benutzerauthentifizierung oder Verzeichnissuchen.
Was ist OpenLDAP und die PHP-OpenLDAP-Erweiterung? 
OpenLDAP ist eine beliebte Open-Source-Lösung, die Verzeichnisdienste basierend auf dem LDAP-Protokoll bereitstellt. Das LDAP-Protokoll dient der Abfrage und Verwaltung verteilter Verzeichnisdienste, welche in Unternehmensumgebungen häufig für Benutzeridentitätsmanagement, Organisationstrukturen oder Adressbücher genutzt werden.
Die OpenLDAP-Erweiterung für PHP (oft als ldap-Erweiterung bezeichnet) ist ein PHP-Modul, das Funktionen zur Kommunikation mit LDAP-Servern bereitstellt. Damit können PHP-Anwendungen zu LDAP-Servern verbinden sowie Authentifizierungen, Suchen, Einträge hinzufügen/ändern/löschen und weitere Verzeichnisoperationen ausführen.
In ServBay betrachten wir primär diese OpenLDAP-Client-Erweiterung innerhalb von PHP, die es Ihrem PHP-Code erlaubt, mit externen LDAP-Servern zu interagieren. ServBay selbst beinhaltet keinen OpenLDAP-Server.
Wichtige Funktionen der PHP-OpenLDAP-Erweiterung 
Mit der PHP-OpenLDAP-Erweiterung sind unter anderem folgende Operationen möglich:
- Verbindung zu einem LDAP-Server aufbauen: Herstellung einer Verbindung zum gewünschten LDAP-Server.
- Durchführen von Bind-Operationen: Anonyme Bindings oder Authentifizierungen mit DN (Distinguished Name) und Passwort.
- Verzeichnissuche: Abfrage von Verzeichniseinträgen mittels Filter, Suchbasis und Suchbereich.
- Auslesen von Einträgen: Ermittlung der Attribute und Werte von gefundenen Einträgen.
- Verzeichnisänderungen: Neue Einträge anlegen, bestehende löschen, Attribute verändern.
- Fehlerbehandlung: LDAP-Fehlermeldungen bei fehlgeschlagenen Operationen auslesen.
Kompatibilität der PHP-OpenLDAP-Erweiterung in ServBay 
Mit ServBay können Sie verschiedene PHP-Versionen installieren und verwenden. Die OpenLDAP-Erweiterung ist in der Regel Bestandteil der offiziellen PHP-Distribution und auch in den von ServBay bereitgestellten PHP-Paketen standardmäßig enthalten. Das heißt: Mit hoher Wahrscheinlichkeit können Sie die OpenLDAP-Erweiterung sofort nutzen, sobald PHP über ServBay installiert ist.
Wie prüfe ich, ob die PHP-OpenLDAP-Erweiterung aktiviert ist? 
Obwohl ServBay typischerweise alle gängigen Erweiterungen standardmäßig aktiviert, empfiehlt sich stets eine Überprüfung. Am einfachsten klappt das mit der phpinfo()-Funktion.
- Erstellen Sie eine neue PHP-Datei in Ihrem ServBay-Webverzeichnis (Standard: - /Applications/ServBay/www), z.B.- info.php.
- Fügen Sie folgenden Inhalt in die Datei ein: php- <?php phpinfo(); ?>1
 2
 3
- Öffnen Sie die Datei in Ihrem Browser über die zugeordnete Webadresse in ServBay (z.B. - http://servbay.demo/info.php).
- Suchen Sie auf der ausgegebenen - phpinfo()-Seite nach dem Eintrag- ldap.
- Falls ein Abschnitt namens - ldapaufgelistet ist und etwa- LDAP Support enabledangezeigt wird, ist die PHP-OpenLDAP-Erweiterung erfolgreich geladen und aktiviert.
Falls kein ldap-Abschnitt sichtbar ist oder LDAP Support als deaktiviert angezeigt wird, prüfen Sie die PHP-Konfiguration Ihrer ServBay-Installation oder kontaktieren Sie den ServBay-Support. Standardmäßig ist die Erweiterung jedoch aktiviert.
Verwendung von OpenLDAP in PHP-Code 
Nachdem Sie bestätigt haben, dass die OpenLDAP-Erweiterung aktiv ist, können Sie in Ihrer PHP-Anwendung die Funktionen der Familie ldap_* zur Kommunikation mit einem LDAP-Server nutzen. Im Folgenden finden Sie ein Basisbeispiel, das zeigt, wie Sie eine Verbindung herstellen, einen Admin-Bind durchführen, einen Benutzer suchen und versuchen, diesen zu authentifizieren.
Wichtiger Hinweis: Die Werte für LDAP-Server-Adresse, Port, Admin-DN, Passwort, Suchbasis, Filter, Benutzerpasswort etc. sind Platzhalter. Ersetzen Sie sie in der Praxis durch Ihre echten Systemeinstellungen und Zugänge. Hinterlegen Sie niemals sensible Daten wie Passwörter im Klartext im Code einer Produktivumgebung.
Beispielcode: Verbindung, Suche und Authentifizierung 
Speichern Sie den folgenden Code als PHP-Datei (z.B. ldap_test.php) im Webverzeichnis Ihrer ServBay-Site und rufen Sie die Datei im Browser auf.
php
<?php
// --- LDAP-Verbindungskonfiguration ---
// Ersetzen Sie dies durch die Adresse Ihres LDAP-Servers. Für LDAPS (SSL/TLS) verwenden Sie ldaps://, Standardport ist 636.
$ldapURI = "ldap://ldap.example.com:389";
// Ersetzen Sie dies mit Ihrem LDAP-Admin-DN oder einem Account mit Suchrechten
$ldapAdminRdn = "cn=admin,dc=example,dc=com";
// Ersetzen Sie dies durch das Passwort für obigen Admin-DN
$ldapAdminPassword = "admin_password";
// --- Benutzersuche und Authentifizierung ---
// Ersetzen Sie dies mit der Suchbasis Ihres Verzeichnisses
$searchBase = "dc=example,dc=com";
// Ersetzen Sie dies durch einen Filter, der den Zielbenutzer selektiert. Z.B. Suche nach uid 'servbay-demo'.
$searchFilter = "(uid=servbay-demo)";
// Ersetzen Sie dies durch das Passwort des zu authentifizierenden Benutzers
$userPasswordToAuthenticate = "user_password_for_servbay_demo";
echo "<h2>PHP OpenLDAP Beispiel in ServBay</h2>";
// 1. Verbindung zum LDAP-Server herstellen
echo "<p>Versuche Verbindung zu LDAP-Server: {$ldapURI}...</p>";
$ldapConn = ldap_connect($ldapURI);
if (!$ldapConn) {
    die("<p style='color: red;'>Fehler: Konnte keine Verbindung zum LDAP-Server herstellen.</p>");
}
echo "<p style='color: green;'>Verbindung zum LDAP-Server erfolgreich.</p>";
// LDAP-Optionen setzen (vor allem Protokollversion und keine Referrals)
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);
// 2. Mit Admin-DN am LDAP-Server authentifizieren (für Berechtigungen wie Suche)
echo "<p>Versuche Bind mit Admin-DN '{$ldapAdminRdn}'...</p>";
if (!ldap_bind($ldapConn, $ldapAdminRdn, $ldapAdminPassword)) {
    echo "<p style='color: red;'>Fehler: Admin-Bind fehlgeschlagen.</p>";
    echo "<p style='color: red;'>LDAP-Fehler: " . ldap_error($ldapConn) . "</p>";
    ldap_unbind($ldapConn); // Verbindung schließen
    die();
}
echo "<p style='color: green;'>Admin-Bind erfolgreich.</p>";
// 3. Benutzer suchen
echo "<p>Versuche Suche im Basis-DN '{$searchBase}' mit Filter '{$searchFilter}'...</p>";
$searchResult = ldap_search($ldapConn, $searchBase, $searchFilter);
if (!$searchResult) {
    echo "<p style='color: red;'>Fehler: LDAP-Suche fehlgeschlagen.</p>";
    echo "<p style='color: red;'>LDAP-Fehler: " . ldap_error($ldapConn) . "</p>";
    ldap_unbind($ldapConn); // Verbindung schließen
    die();
}
echo "<p style='color: green;'>Suche erfolgreich.</p>";
// 4. Suchergebnisse abrufen
$entries = ldap_get_entries($ldapConn, $searchResult);
if ($entries["count"] > 0) {
    echo "<p>{$entries["count"]} passender Eintrag gefunden.</p>";
    // Wir betrachten nur den ersten Treffer
    $userDn = $entries[0]["dn"];
    echo "<p>DN des ersten Benutzers: <strong>{$userDn}</strong></p>";
    // 5. Benutzerauthentifizierung via Bind mit Benutzer-DN und Passwort versuchen
    echo "<p>Versuche Authentifizierung mit Benutzer-DN '{$userDn}'...</p>";
    // Hier erfolgt der User-Bind (nicht als Admin)
    if (@ldap_bind($ldapConn, $userDn, $userPasswordToAuthenticate)) {
        echo "<p style='color: green;'>Benutzerauthentifizierung erfolgreich!</p>";
    } else {
        echo "<p style='color: red;'>Benutzerauthentifizierung fehlgeschlagen.</p>";
        echo "<p style='color: red;'>LDAP-Fehler: " . ldap_error($ldapConn) . "</p>";
    }
} else {
    echo "<p>Kein Benutzer gefunden, der dem Filter '{$searchFilter}' entspricht.</p>";
}
// 6. LDAP-Verbindung beenden
echo "<p>LDAP-Verbindung wird geschlossen...</p>";
ldap_unbind($ldapConn);
echo "<p style='color: green;'>Verbindung geschlossen.</p>";
?>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Erläuterungen zum Code 
- Verbindung (ldap_connect): Baut die Verbindung zum LDAP-Server auf. Gibt ein Verbindungshandle zurück.
- Optionen setzen (ldap_set_option): Legt das Verhalten der Verbindung fest.LDAP_OPT_PROTOCOL_VERSION, 3aktiviert die Nutzung von LDAPv3 (empfohlen).LDAP_OPT_REFERRALS, 0deaktiviert Referrals (in einfachen Anwendungen meist nicht nötig).
- Bind-Operation (ldap_bind): Authentifiziert sich beim LDAP-Server.- Anonymer Bind: ldap_bind($ldapConn)– ohne DN und Passwort, meist mit eingeschränkten Berechtigungen.
- Authentifizierter Bind: ldap_bind($ldapConn, $dn, $password)– mit explizitem DN und Passwort. Im Beispiel zunächst als Admin, dann als Benutzer.
 
- Anonymer Bind: 
- Suche (ldap_search): Sucht unterhalb der angegebenen Suchbasis (searchBase) nach Einträgen gemäß Filter (searchFilter).
- Einträge abrufen (ldap_get_entries): Extrahiert alle Treffer aus dem Suchergebnis als Array.
- Verbindung beenden (ldap_unbind): Trennt die Verbindung zum LDAP-Server und gibt Ressourcen frei.
Hinweise & Best Practices 
- LDAP-Server erforderlich: Dieser Leitfaden und das Beispiel beziehen sich rein auf die Client-Anbindung von OpenLDAP in PHP. Sie benötigen einen funktionsfähigen LDAP-Server (lokal installiert – unabhängig von ServBay) oder einen entfernten Unternehmens-LDAP-/Active-Directory-Server.
- Sicherheit: Setzen Sie in produktiven Umgebungen stets Sicherheits-Best-Practices um – etwa Geheimnisse in Umgebungsvariablen/Sicherheitsdateien speichern und die Kommunikation via LDAPS (SSL/TLS, Port 636) verschlüsseln, nicht unverschlüsselt via Port 389.
- Fehlerbehandlung: Das Beispiel nutzt eine sehr einfache Fehlerausgabe. In echten Applikationen sollten Fehler robust abgefangen und protokolliert werden.
- DN-Format: Das Format des DN (Distinguished Name) ist kritisch und muss exakt zu Ihrer LDAP-Server-Konfiguration passen.
Häufig gestellte Fragen (FAQ) 
F: Ich finde in phpinfo() keinen Abschnitt ldap oder er ist deaktiviert – was tun?
A: In ServBay ist die PHP-OpenLDAP-Erweiterung normalerweise automatisch aktiviert. Achten Sie darauf, phpinfo() für die richtige PHP-Version aufzurufen. Ist der Abschnitt weiter nicht sichtbar, könnte es an einer speziellen ServBay-Version oder Fehlern in Ihrer Installation liegen. Probieren Sie eine Neuinstallation des betroffenen PHP-Pakets oder kontaktieren Sie den ServBay-Support.
F: Meine PHP-Anwendung meldet „Call to undefined function ldap_connect()“.
A: Das deutet darauf hin, dass die OpenLDAP-Erweiterung nicht geladen wurde. Überprüfen Sie mittels phpinfo() wie oben beschrieben den Status der Erweiterung.
F: Die Erweiterung ist geladen, aber Bind oder Verbindungsaufbau liefern LDAP-Fehler.
A: Kontrollieren Sie Serveradresse, Port und Anmeldedaten (DN, Passwort) sorgfältig. Die Meldungen von ldap_error() liefern meist genaue Hinweise, etwa „Invalid credentials“ (ungültige Zugangsdaten) oder „Can't contact LDAP server“ (Verbindung fehlgeschlagen). Stellen Sie sicher, dass Ihr LDAP-Server erreichbar und aktiv ist.
Fazit 
ServBay macht die Nutzung der PHP-OpenLDAP-Erweiterung schnell und unkompliziert zugänglich. Mit wenigen Prüfungen können Sie sicherstellen, dass Ihr PHP-Umfeld für die Kommunikation mit LDAP-Servern bereit ist. Durch die leistungsfähigen LDAP-Funktionen in PHP lassen sich einfach Benutzerauthentifizierung, Verzeichnissuchen oder Organisationsdaten in lokale Webanwendungen integrieren – und Ihre ServBay-Projekte werden um zahlreiche neue Möglichkeiten erweitert.
