LDAP是一個(gè)用來發(fā)布目錄信息到許多不同資源的協(xié)議。通常它都作為一個(gè)集中的地址本使用。LDAP最基本的形式是一個(gè)連接數(shù)據(jù)庫的標(biāo)準(zhǔn)方式。該數(shù)據(jù)庫為讀查詢作了優(yōu)化。因此它可以很快地得到查詢結(jié)果,不過在其它方面,例如更新,就慢得多。要特別注意的是,LDAP通常作為一個(gè)hierarchal數(shù)據(jù)庫使用,而不是一個(gè)關(guān)系數(shù)據(jù)庫。因此,它的結(jié)構(gòu)用樹來表示比用表格好。正因?yàn)檫@樣,就不能用SQL語句了。
簡單說來,LDAP是一個(gè)得到關(guān)于人或者資源的集中、靜態(tài)數(shù)據(jù)的快速方式。
我們來做這樣幾件事:
設(shè)置公共LDAP服務(wù)器的信息;創(chuàng)建一個(gè)LDAP查詢;連接到LDAP服務(wù)器;如果連接成功,處理查詢;格式化輸出;關(guān)閉連接;設(shè)計(jì)搜索界面的HTML表格并顯示結(jié)果。
設(shè)置公共LDAP服務(wù)器的信息:
我們要做的第一件事情是定義所有欲搜索的LDAP服務(wù)器的信息:
"LDAP_NAME" = 新的LDAP項(xiàng)目的名字
"LDAP_SERVER" = 新的LDAP項(xiàng)目的IP地址或者主機(jī)名
"LDAP_ROOT_DN" = 新的LDAP項(xiàng)目的根的辨識名<XMP>
<?php
$LDAP_NAME[0] = "Netscape Net Center";
$LDAP_SERVER[0] = "memberdir.netscape.com";
$LDAP_ROOT_DN[0] = "ou=member_directory,o=netcenter.com";
$LDAP_NAME[1] = "Bigfoot";
$LDAP_SERVER[1] = "ldap.bigfoot.com";
$LDAP_ROOT_DN[1] = "";
//如果沒有選擇服務(wù)器的話將它設(shè)置為0
if(!$SERVER_ID)
$SERVER_ID=0;
?>
建立LDAP查詢:
前面已經(jīng)提到,LDAP查詢與SQL查詢是不一樣的。因此,語句要受到一定的限制,以下是一個(gè)基本的例子。
//Create Query $ldap_query = "cn=$common";
在我們的例子中,“cn”是我們要進(jìn)行搜索的屬性,而$common是由搜索的form中得到的字符串變量。LDAP的查詢語句語句可使用通配符‘*’。例如‘$stanley’將可以找出‘dan stanley’。
連接到LDAP服務(wù)器:
以下的函數(shù)連接到一個(gè)LDAP資源,并且將連接的識別號賦給一個(gè)變量,就好象連接到一個(gè)通常的數(shù)據(jù)庫一樣,例如MySQL。
<?php
//連接到LDAP
$connect_id = ldap_connect($LDAP_SERVER[$SERVER_ID]);
?>
在我們的例子中,“$connect_id”是連接的識別號,$LDAP_SERVER是可能的ldap服務(wù)器數(shù)組,
而$SERVER_ID是由搜索表格得到的LDAP服務(wù)器變量。
如果連接成功,處理查詢:
如果連接成功的話,我們將得到一個(gè)有效的LDAP連接識別號,這樣我們就可以處理查詢。
<?php
if($connect_id)
{
//認(rèn)證
$bind_id = ldap_bind($connect_id);
//執(zhí)行搜索
$search_id = ldap_search($connect_id, $LDAP_ROOT_DN[$SERVER_ID], $ldap_query);
//將結(jié)果集合分配給一個(gè)數(shù)組
$result_array = ldap_get_entries($connect_id, $search_id);
}
else
{
//顯示連接錯(cuò)誤
echo "Could not connect to LDAP server: $LDAP_SERVER[$SERVER_ID]";
}
?>
一旦我們與LDAP服務(wù)器建立好連接,我們就必須進(jìn)行認(rèn)證。PHP在連接大多數(shù)的數(shù)據(jù)庫時(shí),都是通過發(fā)送用戶名和密碼來進(jìn)行的。不過,在LDAP中,認(rèn)證是未知的,直到進(jìn)行一個(gè)bind操作。在我們的例子中,“$bind_id”是綁定連接的標(biāo)識符。我們是通過匿名綁定到公共的LDAP服務(wù)器的。因此,在執(zhí)行l(wèi)dap_bind()時(shí),只使用連接識別號就可以了,無需其它的參數(shù)。
本新聞共
5頁,當(dāng)前在第
1頁
1 2 3 4 5