Menggunakan Ekstensi OpenLDAP PHP di ServBay
ServBay merupakan persekitaran pembangunan Web tempatan yang berkuasa, menyokong pelbagai teknologi. Bagi pembangun aplikasi PHP yang perlu berinteraksi dengan pelayan LDAP (Lightweight Directory Access Protocol), ServBay telah diprapasang dengan ekstensi OpenLDAP untuk PHP, membolehkan anda mengaktif dan menggunakannya dengan mudah. Artikel ini akan membimbing anda tentang cara memanfaatkan ekstensi ini di ServBay bagi mencapai fungsi seperti autentikasi pengguna dan carian direktori.
Apakah Itu OpenLDAP dan Ekstensi OpenLDAP untuk PHP?
OpenLDAP ialah implementasi sumber terbuka yang popular, menyediakan perkhidmatan direktori berasaskan protokol LDAP. Protokol LDAP digunakan secara meluas dalam persekitaran perusahaan untuk autentikasi identiti pengguna, pengurusan struktur organisasi, perkhidmatan buku alamat, dan banyak lagi.
Ekstensi OpenLDAP PHP (biasanya dikenali sebagai ekstensi ldap
) adalah modul di dalam PHP yang menawarkan pustaka fungsi untuk komunikasi dengan pelayan LDAP. Dengan ekstensi ini, aplikasi PHP boleh menyambung ke pelayan LDAP, melakukan operasi bind (autentikasi), carian, penambahan, pengubahsuaian, serta penghapusan entri dalam direktori.
Dalam konteks ServBay, apa yang kita tekankan adalah ekstensi klien OpenLDAP dalam PHP ini, yang membenarkan kod PHP anda berhubung dan mengendalikan pelayan LDAP luaran. ServBay sendiri tidak menyertakan pelayan OpenLDAP.
Fungsi Utama Ekstensi OpenLDAP PHP
Dengan ekstensi OpenLDAP PHP, anda boleh:
- Menyambung ke pelayan LDAP: Membina sambungan ke pelayan LDAP tertentu.
- Melakukan operasi bind: Bind anonim, atau bind autentikasi menggunakan DN (Distinguished Name) dan kata laluan.
- Mencari dalam direktori: Mencari entri dalam direktori berdasarkan penapis, asas carian, dan skop tertentu.
- Membaca maklumat entri: Mendapatkan atribut dan nilai bagi setiap entri yang ditemui.
- Melakukan pengubahsuaian: Menambah, memadam atau mengubah atribut entri dalam direktori.
- Mengendalikan ralat LDAP: Mendapatkan maklumat ralat sekiranya operasi gagal.
Kompatibiliti Versi Ekstensi OpenLDAP PHP di ServBay
ServBay menyokong pemasangan dan penggunaan pelbagai versi PHP. Ekstensi OpenLDAP PHP biasanya disertakan sebagai sebahagian rasmi pengedaran PHP dan dimasukkan secara lalai dalam pakej PHP yang dibekalkan oleh ServBay. Ini bermakna jika anda menggunakan versi PHP daripada ServBay, kemungkinan besar ekstensi OpenLDAP sudah tersedia untuk digunakan.
Cara Mengesahkan Ekstensi OpenLDAP PHP Telah Dihidupkan
Walaupun ServBay disediakan untuk terus digunakan (‘out-of-the-box’) dan lazimnya mengaktifkan ekstensi penting secara lalai, adalah baik untuk sentiasa mengesahkan statusnya. Cara paling mudah ialah menggunakan fungsi phpinfo()
.
Di direktori root laman web anda di ServBay (lalai:
/Applications/ServBay/www
), cipta satu file PHP baharu, contohnyainfo.php
.Tambahkan kandungan berikut ke dalam file
info.php
:php<?php phpinfo(); ?>
1
2
3Lawati melalui pelayar web laman web yang berkaitan dengan file ini dalam ServBay (contohnya
http://servbay.demo/info.php
).Dalam halaman
phpinfo()
yang terpapar, cari bahagian bertajukldap
.Jika terdapat bahagian
ldap
dengan maklumat konfigurasi (contohnyaLDAP Support enabled
), maka ekstensi OpenLDAP untuk PHP telah berjaya dimuat dan diaktifkan.
Jika anda tidak menjumpai bahagian ldap
, atau LDAP Support
dipaparkan sebagai disabled, anda mungkin perlu menyemak konfigurasi build bagi versi PHP tersebut di ServBay atau menghubungi sokongan ServBay untuk bantuan. Namun, dalam kebanyakan kes, ia akan diaktifkan secara lalai.
Menggunakan OpenLDAP dalam Kod PHP
Setelah anda mengesahkan ekstensi OpenLDAP diaktifkan, anda boleh menggunakan siri fungsi ldap_*
dalam aplikasi PHP untuk berinteraksi dengan pelayan LDAP. Berikut ialah contoh asas cara menyambung ke pelayan LDAP, melakukan bind sebagai pentadbir, mencari pengguna, serta mencuba autentikasi pengguna.
Penting: Konfigurasi dalam contoh di bawah seperti alamat pelayan LDAP, port, DN pentadbir, kata laluan, asas carian, penapis pengguna, dan kata laluan pengguna hanyalah placeholder. Tukar kepada maklumat sebenar mengikut pelayan LDAP anda. Jangan sekali-kali menulis maklumat sensitif (seperti kata laluan) secara keras (‘hard-code’) dalam kod di persekitaran produksi.
Contoh Kod: Sambungan Asas, Carian & Autentikasi
Simpan kod berikut sebagai fail PHP, contohnya ldap_test.php
, di dalam direktori laman web ServBay, dan akses melalui pelayar untuk dicuba.
php
<?php
// --- Konfigurasi sambungan LDAP ---
// Tukar dengan alamat pelayan LDAP anda. Jika gunakan LDAPS (SSL/TLS), gunakan awalan ldaps://, port lalai 636.
$ldapURI = "ldap://ldap.example.com:389";
// Tukar dengan DN pentadbir atau pengguna berkeupayaan carian anda
$ldapAdminRdn = "cn=admin,dc=example,dc=com";
// Tukar dengan kata laluan bagi DN pentadbir yang dinyatakan di atas
$ldapAdminPassword = "admin_password";
// --- Konfigurasi carian dan autentikasi pengguna ---
// Tukar dengan asas DN carian pengguna dalam direktori LDAP anda
$searchBase = "dc=example,dc=com";
// Tukar dengan penapis untuk mencari pengguna tertentu. Contohnya, mencari pengguna dengan uid 'servbay-demo'.
$searchFilter = "(uid=servbay-demo)";
// Tukar dengan kata laluan pengguna yang anda mahu autentikasi
$userPasswordToAuthenticate = "user_password_for_servbay_demo";
echo "<h2>Contoh OpenLDAP PHP dalam ServBay</h2>";
// 1. Sambungan ke pelayan LDAP
echo "<p>Mencuba untuk sambung ke pelayan LDAP: {$ldapURI}...</p>";
$ldapConn = ldap_connect($ldapURI);
if (!$ldapConn) {
die("<p style='color: red;'>Ralat: Tidak dapat sambung ke pelayan LDAP.</p>");
}
echo "<p style='color: green;'>Berjaya sambung ke pelayan LDAP.</p>";
// Tetapkan pilihan LDAP (disarankan tetapkan versi protokol dan jangan ikut referral)
ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0);
// 2. Bind sebagai pentadbir ke pelayan LDAP (untuk operasi carian, dll.)
echo "<p>Mencuba bind menggunakan DN pentadbir '{$ldapAdminRdn}'...</p>";
if (!ldap_bind($ldapConn, $ldapAdminRdn, $ldapAdminPassword)) {
echo "<p style='color: red;'>Ralat: Bind pentadbir gagal.</p>";
echo "<p style='color: red;'>Ralat LDAP: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Tutup sambungan
die();
}
echo "<p style='color: green;'>Bind pentadbir berjaya.</p>";
// 3. Cari pengguna
echo "<p>Mencuba untuk cari penapis '{$searchFilter}' dalam asas DN '{$searchBase}'...</p>";
$searchResult = ldap_search($ldapConn, $searchBase, $searchFilter);
if (!$searchResult) {
echo "<p style='color: red;'>Ralat: Carian LDAP gagal.</p>";
echo "<p style='color: red;'>Ralat LDAP: " . ldap_error($ldapConn) . "</p>";
ldap_unbind($ldapConn); // Tutup sambungan
die();
}
echo "<p style='color: green;'>Carian berjaya.</p>";
// 4. Dapatkan hasil carian
$entries = ldap_get_entries($ldapConn, $searchResult);
if ($entries["count"] > 0) {
echo "<p>Menjumpai {$entries["count"]} entri yang sepadan.</p>";
// Anggap kita hanya ambil pengguna pertama yang ditemui
$userDn = $entries[0]["dn"];
echo "<p>DN pengguna pertama yang ditemui: <strong>{$userDn}</strong></p>";
// 5. Cuba bind autentikasi menggunakan DN & kata laluan pengguna yang dijumpai
echo "<p>Mencuba bind autentikasi menggunakan DN pengguna '{$userDn}'...</p>";
// Penting: Ini adalah bind untuk autentikasi pengguna, bukan pentadbir
if (@ldap_bind($ldapConn, $userDn, $userPasswordToAuthenticate)) {
echo "<p style='color: green;'>Autentikasi pengguna berjaya!</p>";
} else {
echo "<p style='color: red;'>Autentikasi pengguna gagal.</p>";
echo "<p style='color: red;'>Ralat LDAP: " . ldap_error($ldapConn) . "</p>";
}
} else {
echo "<p>Tiada pengguna ditemui bagi penapis '{$searchFilter}'.</p>";
}
// 6. Tutup sambungan LDAP
echo "<p>Menutup sambungan LDAP...</p>";
ldap_unbind($ldapConn);
echo "<p style='color: green;'>Sambungan ditutup.</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
Penjelasan Kod
- Sambungan (
ldap_connect
): Membina sambungan ke pelayan LDAP dan mengembalikan pemegang sambungan. - Tetapan pilihan (
ldap_set_option
): Mengkonfigurasi kelakuan sambungan.LDAP_OPT_PROTOCOL_VERSION, 3
menetapkan penggunaan protokol LDAPv3 (disyorkan).LDAP_OPT_REFERRALS, 0
mematikan referral (biasanya tidak diperlukan untuk aplikasi ringkas). - Bind (
ldap_bind
): Melakukan pengesahan ke pelayan LDAP.- Bind anonim:
ldap_bind($ldapConn)
- tanpa DN dan kata laluan, biasanya akses terhad. - Bind autentikasi:
ldap_bind($ldapConn, $dn, $password)
- dengan DN dan kata laluan tertentu. Dalam contoh, kita bind sebagai pentadbir dahulu untuk membolehkan operasi carian, kemudian lakukan bind sebagai pengguna untuk autentikasi.
- Bind anonim:
- Carian (
ldap_search
): Mencari entri dalam asas DN (searchBase
) mengikut penapis (searchFilter
). - Dapatkan entri (
ldap_get_entries
): Mendapatkan data semua entri yang sepadan sebagai larik (array). - Tutup sambungan (
ldap_unbind
): Mengakhiri sambungan dengan pelayan LDAP dan membebaskan sumber.
Perkara Penting
- Keperluan pelayan LDAP: Artikel dan contoh hanya menerangkan cara menggunakan ekstensi OpenLDAP klien untuk PHP. Anda memerlukan pelayan LDAP yang boleh diakses — sama ada pemasangan OpenLDAP tempatan (diuruskan secara berasingan daripada ServBay) atau pelayan LDAP/Active Directory perusahaan di lokasi jauh.
- Keselamatan: Untuk persekitaran produksi, amalkan prinsip keselamatan terbaik seperti menggunakan pembolehubah persekitaran, fail konfigurasi selamat dan membuat sambungan melalui LDAPS (SSL/TLS, biasanya port 636) — elakkan LDAP yang tidak dienkripsi (port 389).
- Pengendalian ralat: Kod contoh menggunakan pengendalian ralat asas; untuk aplikasi sebenar, gunakan pengesanan ralat dan logging yang lebih kukuh.
- Format DN: Format DN (Distinguished Name) mesti tepat dan selaras dengan konfigurasi pelayan LDAP anda. Double check setiap masa.
Soalan Lazim (FAQ)
S: Saya tidak nampak bahagian ldap
dalam phpinfo()
, atau ia dipaparkan sebagai disable. Apa perlu saya lakukan?
J: Secara lalai, ekstensi OpenLDAP PHP dihidupkan di ServBay. Jika anda mengalami masalah ini, pastikan anda merujuk output phpinfo()
untuk versi PHP yang betul. Jika masih tidak ada, ini mungkin berkaitan versi khusus ServBay atau pemasangan anda; cuba pasang semula pakej PHP berkenaan atau hubungi sokongan ServBay.
S: Kod PHP saya gagal dengan mesej Call to undefined function ldap_connect()
.
J: Ini bermakna ekstensi OpenLDAP untuk PHP tidak dimuatkan/diaktifkan. Sila rujuk semula bahagian sebelumnya untuk pengesahan melalui phpinfo()
.
S: Ekstensi telah diaktifkan, tetapi sambungan atau bind gagal dengan ralat LDAP.
J: Semak semula konfigurasi sambungan anda (alamat pelayan, port) serta credential bind (DN, kata laluan). Mesej ralat LDAP (boleh diperoleh dengan ldap_error()
) selalunya memberikan petunjuk, contohnya “Invalid credentials” (kelayakan tidak sah) atau “Can't contact LDAP server” (tidak dapat hubungi pelayan LDAP). Pastikan pelayan LDAP sedia beroperasi dan rangkaian boleh diakses.
Rumusan
ServBay menyediakan cara mudah dan pantas untuk menggunakan ekstensi OpenLDAP PHP. Dengan beberapa langkah pengesahan ringkas, anda boleh memastikan persekitaran PHP anda boleh berkomunikasi dengan pelayan LDAP. Kuasai fungsi LDAP hebat melalui PHP dan perluaskan fungsi aplikasi web tempatan anda — termasuk autentikasi pengguna dan pertanyaan maklumat direktori — dalam pembangunan berasaskan ServBay.