Korzystanie z rozszerzenia OpenLDAP dla PHP w ServBay
ServBay to zaawansowane, lokalne środowisko do tworzenia aplikacji webowych, które obsługuje wiele stosów technologicznych. Dla deweloperów PHP, którzy muszą integrować się z serwerami LDAP (Lightweight Directory Access Protocol), ServBay oferuje domyślną obsługę rozszerzenia OpenLDAP dla PHP — bardzo łatwo jest je włączyć i z niego korzystać. W tym artykule dowiesz się, jak skonfigurować i używać rozszerzenia OpenLDAP w ServBay do realizacji funkcji takich jak uwierzytelnianie użytkowników czy przeszukiwanie katalogów.
Czym jest OpenLDAP i rozszerzenie OpenLDAP dla PHP?
OpenLDAP to popularna implementacja open source zapewniająca usługi katalogowe oparte o protokół LDAP. LDAP jest standardem do zarządzania i dostępu do rozproszonych usług katalogowych i powszechnie stosuje się go w firmach do uwierzytelniania użytkowników, zarządzania strukturą organizacyjną oraz usług książek adresowych.
Rozszerzenie OpenLDAP dla PHP (często nazywane po prostu rozszerzeniem ldap
) to moduł języka PHP udostępniający zestaw funkcji do komunikacji z serwerami LDAP. Korzystając z niego, aplikacje PHP mogą łączyć się z serwerami LDAP, wykonywać operacje takie jak wiązanie (uwierzytelnianie), przeszukiwanie katalogu, dodawanie, modyfikowanie oraz usuwanie wpisów.
W przypadku ServBay interesuje nas klient OpenLDAP zintegrowany z PHP, umożliwiający Twojemu kodowi PHP połączenie z zewnętrznym serwerem LDAP oraz zarządzanie nim. ServBay sam nie zawiera serwera OpenLDAP.
Kluczowe funkcje rozszerzenia OpenLDAP dla PHP
Dzięki rozszerzeniu OpenLDAP dla PHP możesz:
- Łączyć się z serwerem LDAP – ustanowić połączenie z wybranym serwerem LDAP.
- Wykonywać proces wiązania – logować się anonimowo lub uwierzytelniać przy użyciu DN (distinguished name) i hasła.
- Przeszukiwać katalog – wyszukiwać wpisy według filtrów, baz DN i zakresów.
- Odczytywać informacje o wpisach – pobierać atrybuty i wartości z wyników wyszukiwania.
- Wykonywać modyfikacje – dodawać, usuwać i zmieniać właściwości wpisów.
- Obsługiwać błędy LDAP – odczytywać szczegóły błędnych operacji.
Kompatybilność wersji rozszerzenia OpenLDAP dla PHP w ServBay
ServBay pozwala instalować i uruchamiać wiele wersji PHP. Rozszerzenie OpenLDAP dla PHP jest zwykle dołączone do oficjalnych wydań PHP i domyślnie obecne w paczkach PHP dostarczanych przez ServBay. Oznacza to, że korzystając z PHP od ServBay, najczęściej masz to rozszerzenie już zainstalowane.
Jak sprawdzić, czy rozszerzenie OpenLDAP dla PHP jest włączone
ServBay jest projektowany jako rozwiązanie „gotowe do działania”, i większość popularnych rozszerzeń jest domyślnie aktywna. Jednak zawsze warto zweryfikować, czy rozszerzenie faktycznie jest aktywne. Najprościej sprawdzisz to za pomocą funkcji phpinfo()
.
Stwórz nowy plik PHP w katalogu głównym swojej witryny w ServBay (domyślnie
/Applications/ServBay/www
), np.info.php
.Dodaj do pliku
info.php
następującą zawartość:php<?php phpinfo(); ?>
1
2
3Odwiedź stronę odpowiadającą temu plikowi w swojej konfiguracji ServBay (np.
http://servbay.demo/info.php
).Na stronie wygenerowanej przez
phpinfo()
wyszukaj sekcję zatytułowanąldap
.Jeśli widzisz sekcję
ldap
i takie informacje jakLDAP Support enabled
, oznacza to, że rozszerzenie OpenLDAP dla PHP zostało załadowane i działa.
Jeżeli nie możesz znaleźć sekcji ldap
lub LDAP Support
pokazuje status disabled, sprawdź konfigurację danej wersji PHP w ServBay lub skontaktuj się z pomocą techniczną ServBay. Zazwyczaj rozszerzenie to jest jednak domyślnie aktywne.
Użycie OpenLDAP w kodzie PHP
Po potwierdzeniu, że rozszerzenie jest aktywne, możesz wykorzystać funkcje z serii ldap_*
do komunikacji z serwerem LDAP w aplikacji PHP. Poniżej prezentujemy podstawowy przykład, jak połączyć się z serwerem LDAP, zalogować się jako administrator, wyszukać użytkownika i spróbować go uwierzytelnić.
Ważne: Wszystkie dane konfiguracyjne w kodzie (adres serwera LDAP, port, DN administratora, hasło itp.) to przykłady. Własne środowisko musisz skonfigurować uwzględniając dane swojej infrastruktury LDAP. Nigdy nie powinieneś umieszczać poufnych danych (np. haseł) na stałe w kodzie działającym produkcyjnie.
Przykładowy kod: połączenie, wyszukiwanie i uwierzytelnianie
Zapisz poniższą zawartość jako plik PHP (np. ldap_test.php
) w katalogu swojej strony ServBay i uruchom poprzez przeglądarkę.
php
<?php
// --- Konfiguracja połączenia LDAP ---
// Zamień na adres swojego serwera LDAP. Jeśli korzystasz z LDAPS (SSL/TLS), użyj przedrostka ldaps:// i portu 636.
$ldapURI = "ldap://ldap.example.com:389";
// Zamień na DN (Distinguished Name) administratora lub użytkownika z prawami do przeszukiwania katalogu
$ldapAdminRdn = "cn=admin,dc=example,dc=com";
// Zamień na hasło przypisane do powyższego DN administratora
$ldapAdminPassword = "admin_password";
// --- Konfiguracja wyszukiwania i uwierzytelniania użytkownika ---
// Zamień na bazowy DN, w którym katalogujesz użytkowników
$searchBase = "dc=example,dc=com";
// Zamień na filtr użytkownika, którego chcesz wyszukać. Np. wyszukiwanie użytkownika o uid 'servbay-demo'.
$searchFilter = "(uid=servbay-demo)";
// Zamień na hasło użytkownika, którego chcesz uwierzytelnić
$userPasswordToAuthenticate = "user_password_for_servbay_demo";
echo "<h2>Przykład użycia OpenLDAP z PHP w ServBay</h2>";
// 1. Połączenie z serwerem LDAP
echo "<p>Próba połączenia z serwerem LDAP: {$ldapURI}...</p>";
$ldapConn = ldap_connect($ldapURI);
if (!$ldapConn) {
die("<p style='color: red;'>Błąd: nie można połączyć się z serwerem LDAP.</p>");
}
echo "<p style='color: green;'>Połączenie z serwerem LDAP ustanowione.</p>";
// Ustawienie opcji LDAP (najlepiej stosować wersję protokołu 3 bez podążania za referrals)
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);
// 2. Logowanie jako administrator (dostęp do operacji wyszukiwania itd.)
echo "<p>Logowanie przy użyciu DN administratora '{$ldapAdminRdn}'...</p>";
if (!ldap_bind($ldapConn, $ldapAdminRdn, $ldapAdminPassword)) {
echo "<p style='color: red;'>Błąd: logowanie administratora nie powiodło się.</p>";
echo "<p style='color: red;'>Błąd LDAP: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Zakończ połączenie
die();
}
echo "<p style='color: green;'>Logowanie administratora zakończone sukcesem.</p>";
// 3. Wyszukiwanie użytkownika
echo "<p>Wyszukiwanie według bazy DN '{$searchBase}' i filtra '{$searchFilter}'...</p>";
$searchResult = ldap_search($ldapConn, $searchBase, $searchFilter);
if (!$searchResult) {
echo "<p style='color: red;'>Błąd: wyszukiwanie LDAP nieudane.</p>";
echo "<p style='color: red;'>Błąd LDAP: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Zakończ połączenie
die();
}
echo "<p style='color: green;'>Wyszukiwanie zakończone sukcesem.</p>";
// 4. Pobranie wyników wyszukiwania
$entries = ldap_get_entries($ldapConn, $searchResult);
if ($entries["count"] > 0) {
echo "<p>Znaleziono {$entries["count"]} pasujących wpisów.</p>";
// Zakładamy, że ważny jest tylko pierwszy znaleziony użytkownik
$userDn = $entries[0]["dn"];
echo "<p>DN znalezionego użytkownika: <strong>{$userDn}</strong></p>";
// 5. Próba uwierzytelnienia przy użyciu DN użytkownika i hasła
echo "<p>Próba logowania jako użytkownik DN '{$userDn}'...</p>";
// Uwaga: autentykacja wykonywana jest tutaj dla użytkownika, nie administratora
if (@ldap_bind($ldapConn, $userDn, $userPasswordToAuthenticate)) {
echo "<p style='color: green;'>Uwierzytelnienie użytkownika powiodło się!</p>";
} else {
echo "<p style='color: red;'>Logowanie użytkownika nie powiodło się.</p>";
echo "<p style='color: red;'>Błąd LDAP: " . ldap_error($ldapConn) . "</p>";
}
} else {
echo "<p>Nie znaleziono użytkownika pasującego do filtra '{$searchFilter}'.</p>";
}
// 6. Zakończenie połączenia LDAP
echo "<p>Zamykanie połączenia LDAP...</p>";
ldap_unbind($ldapConn);
echo "<p style='color: green;'>Połączenie zakończone.</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
Wyjaśnienie kodu
- Połączenie (
ldap_connect
): nawiązuje połączenie z serwerem LDAP, zwraca identyfikator połączenia. - Ustawianie opcji (
ldap_set_option
): konfiguracja zachowania połączenia.LDAP_OPT_PROTOCOL_VERSION, 3
wymusza użycie LDAPv3;LDAP_OPT_REFERRALS, 0
wyłącza referrals (zwykle niepotrzebne w prostych zastosowaniach). - Wiązanie (
ldap_bind
): uwierzytelnia się wobec serwera LDAP.- Anonimowe:
ldap_bind($ldapConn)
— bez DN i hasła, uprawnienia zwykle mocno ograniczone. - Uwierzytelnione:
ldap_bind($ldapConn, $dn, $password)
— logowanie z użyciem DN i hasła. Przykład: najpierw logowanie administratora do wyszukiwania, później logowanie użytkownika do autoryzacji.
- Anonimowe:
- Wyszukiwanie (
ldap_search
): szuka wpisów w bazie DN (searchBase
) według filtra (searchFilter
). - Pobieranie wpisów (
ldap_get_entries
): zwraca tablicę z wynikami wyszukiwania i danymi wpisów. - Zamknięcie połączenia (
ldap_unbind
): kończy połączenie z serwerem LDAP i zwalnia zasoby.
Wskazówki i dobre praktyki
- Wymagania po stronie serwera: Ten artykuł dotyczy wyłącznie korzystania z klienta OpenLDAP w PHP. Niezbędny jest dostępny serwer LDAP — może być zainstalowany lokalnie (niezależnie od ServBay) lub dostępny sieciowo jako LDAP/Active Directory.
- Bezpieczeństwo: W środowisku produkcyjnym zawsze stosuj dobre praktyki ochrony poufnych danych — używaj zmiennych środowiskowych, bezpiecznych plików konfiguracyjnych i szyfruj połączenie poprzez LDAPS (port 636), unikając niezaszyfrowanego LDAP (port 389).
- Obsługa błędów: Przykładowy kod obsługuje tylko podstawowe przypadki błędów — w rzeczywistych zastosowaniach warto wdrożyć rozbudowane logowanie i obsługę wyjątków.
- Format DN: Format DN (distinguished name) jest bardzo precyzyjny — zawsze sprawdzaj zgodność DN ze swoją konfiguracją serwera LDAP.
Najczęstsze pytania (FAQ)
Q: Nie widzę sekcji ldap
w phpinfo()
, lub jest wyłączona. Co robić?
A: Domyślnie rozszerzenie OpenLDAP jest aktywne w ServBay. Sprawdź, czy używasz odpowiedniego pliku phpinfo()
z wersji PHP, z której korzysta ServBay. Jeśli problem nie ustępuje, spróbuj ponownie zainstalować pakiet PHP w ServBay lub skontaktuj się z supportem.
Q: Mój kod PHP zwraca błąd „Call to undefined function ldap_connect()”.
A: To znaczy, że rozszerzenie OpenLDAP dla PHP nie jest włączone lub poprawnie załadowane. Wróć do poprzedniej sekcji i sprawdź status poprzez phpinfo()
.
Q: Rozszerzenie jest aktywne, ale połączenie lub logowanie kończy się błędem LDAP.
A: Sprawdź poprawność konfiguracji połączenia (adres, port serwera) oraz dane logowania (DN, hasło). Komunikaty błędów z ldap_error()
często podpowiadają przyczynę — np. "Invalid credentials" (błędne dane logowania) lub "Can't contact LDAP server" (brak połączenia z serwerem). Upewnij się, że serwer LDAP działa i jest osiągalny w sieci.
Podsumowanie
ServBay to szybki i wygodny sposób na skorzystanie z rozszerzenia OpenLDAP w PHP. Dzięki prostym krokom weryfikacyjnym możesz mieć pewność, że Twoje środowisko PHP jest gotowe do komunikacji z serwerami LDAP. W połączeniu z szeroką funkcjonalnością LDAP w PHP, SerwBay pozwala deweloperom łatwo rozbudować lokalne aplikacje webowe o logowanie i obsługę katalogów użytkowników — otwierając nowe możliwości dla Twoich projektów.