茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1664643 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00036.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

PHP特區 : [轉貼]用PHP操作LDAP

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15766
[轉貼]用PHP操作LDAP
用PHP操作LDAP
2010-09-06 10:581

LDAP是什麼
LDAP是一個用來發佈目錄信息到許多不同資源的協議。通常它都作為一個集中的地址本使用,不過根據組織者的需要,它可以做得更加強大。
LDAP最基本的形式是一個連接數據庫的標準方式。該數據庫為讀查詢作了優化。因此它可以很快地得到查詢結果,不過在其它方面,例如更新,就慢得多。要特別注意的是,LDAP通常作為一個hierarchal數據庫使用,而不是一個關係數據庫。因此,它的結構用樹來表示比用表格好。正因為這樣,就不能用SQL語句了。
簡單說來,LDAP是一個得到關於人或者資源的集中、靜態數據的快速方式。

LDAP是輕量目錄訪問協議(Lightweight Directory Access Protocol)的縮寫,其實是一話號碼簿,類似於我們所使用諸如NIS(Network Information Service)、DNS (Domain Name Service)等網絡目錄,也類似於你在花園中所看到的樹木。
LDAP是一種特殊的數據庫。但是LDAP和一般的數據庫不同,明白這一點是很重要的。 LDAP對查詢進行了優化,與寫性能相比LDAP的讀性能要優秀很多。
1.1 LDAP的存儲規則
區分名(DN,Distinguished Name)
和自然界中的樹不同,文件系統/LDAP/電話號碼簿目錄的每一片枝葉都至少有一個獨一無二的屬性,這一屬性可以幫助我們來區別這些枝葉。
在文件系統中, 這些獨一無二的屬性就是帶有完整路徑的文件名。比如/etc/passwd,該文件名在該路徑下是獨一無二的。當然我們可以有/usr/passwd, /opt/passwd,但是根據它們的完整路徑,它們仍然是唯一的。
在LDAP中,一個條目的區分名稱叫做「dn」或者叫做區分名。在一個目錄中這個名稱總是唯一的。比如,我的dn是"uid=aghaffar, ou=People, o=developer.ch"。不可能有相同的dn,但是我們可以有諸如"uid=aghaffar, ou=Administrators, o=developer.ch"的dn。這同上面文件系統中/etc/passwd 和 /usr/passwd的例子很類似。
我們有獨一無二的屬性,在"ou=Administrators, o=developer.ch" 中uid和在"ou=People, o=developer.ch"中的uid。這並不矛盾。
CN=Common Name 為用戶名或服務器名,最長可以到80個字符,可以為中文;
OU=Organization Unit為組織單元,最多可以有四級,每級最長32個字符,可以為中文;
O=Organization 為組織名,可以3—64個字符長
C=Country為國家名,可選,為2個字符長

LDAP目錄以一系列「屬性對」的形式來存儲記錄項,每一個記錄項包括屬性類型和屬性值(這與關係 型 數據庫用行和列來存取數據有根本的不同)。
mail = ldap@uenu.com
othermailbox = ldap@uenu.com
givenname = givenname
sn = test sn
屬性可添加,以下一個屬性必須賦值:
objectclass=person (值為:person 或 server 或 organization 或 其他自定義的值)

2 Php如何操作LDAP
2.1 Php如何與LDAP連接和關閉
$ds=ldap_connect("ServerName")

ServerName是LDAP的服務器名,

例:
$ds=ldap_connect(「10.31.172.30:1000」)

返回值是:true 或 false

關閉連接
ldap_close($ds);


2.2 在php中如何搜索用戶信息
     $ds=ldap_connect("202.101.1.2");
     //首先連接上服務器
     $justthese = array("cn","userpassword",」location」);
     //搜索函數中的一個參數,要求返回哪些信息,
     //以上傳回cn,userpassword,location,這些都要求小寫
     $sr=ldap_search($ds,"o=jite", "cn=dom*",$justthese);
     //第一個參數開啟LDAP的代號
     //第二個參數最基本的 dn 條件值 , 例:」o=jite,c=cn」
     //第三個參數 filter 為布林條件,它的語法可以在 Netscape 站上找一份 dirsdkpg.pdf 檔案.
     // 』o』為組織名,』cn』 為用戶名,用戶名可用通配符 』*』
     echo "domadmin姓氏有".ldap_count_entries($ds,$sr)." 個<p>";
     //ldap_count_entries($ds,$sr)傳回記錄總數

     $info = ldap_get_entries($ds, $sr);
     //LDAP的全部傳回資料
     echo "資料傳回 ".$info["count"]."筆:<p>";
     for ($i=0; $i<$info["count"]; $i++) {
          echo "dn為:". $info[$i]["dn"] ."<br>";
          echo "cn為:". $info[$i]["cn"][0] ."<br>"; //顯示用戶名
          echo "email為:". $info[$i]["mail"][0] ."<p>"; //顯示mail
          echo "email為:". $info[$i][「userpassword"][0] ."<p>"; //顯示加密後的密碼
     }

2.3 添加用戶
     $ds=ldap_connect("10.31.172.30:1000");
     //首先連接上服務器
     $r=ldap_bind($ds,"cn=domadmin,o=jite","password");
     //繫住一個管理員,有寫的權限
     // cn=domadmin,o=jite順序不能變
     $info["cn"]="aaa"; //必填
     $info["userpassword"]="aaa";
     $info["location"]="shanghai";
     $info["objectclass"] = "person"; //必填person為個人,還有server…
     ldap_add($ds, "cn=".$info["cn"].",o=jite", $info);
     ldap_unbind($ds);
     //取消綁定
     ldap_close($ds);
     //關閉連接

2.4 刪除用戶
     $ds=ldap_connect("10.31.172.30:1000");
     //首先連接上服務器
     ldap_bind($ds,"cn=domadmin,o=jite","password");
     //綁定管理員,有刪除的權限
     $dn="cn=dingxf,o=jite";
     ldap_delete($ds, $dn);
     //刪除用戶
     ldap_unbind($ds);
     //取消綁定
     ldap_close($ds);
     //關閉連接

2.5 修改用戶資料
     $ds=ldap_connect("10.31.172.30:1000");
     //首先連接上服務器
     ldap_bind($ds,"cn=domadmin,o=jite","password");
     //綁定管理員,有修改的權限
     $dn="cn=dingxf,o=jite";
     //用戶dn
     $info["userpassword"]="aaa"; //要修改的信息,放在數組變量中
     $info["location"]="shanghaisdaf";

     ldap_modify($ds, $dn , $info);
     //修改函數
     ldap_unbind($ds);
     //取消綁定
     ldap_close($ds);
     //關閉連接

2.6 用戶登錄驗證
     $ds=ldap_connect("10.31.172.30:1000");
     //首先連接上服務器
     if (ldap_bind($ds,"cn=CN,o=jite","dingxf")){
          echo "驗證通過";
     }else{
          echo "驗證不通過";
     }
     ldap_unbind($ds);
     //取消綁定
     ldap_close($ds);
     //關閉連接


原文出處:用PHP操作LDAP_Tian Huimin_百度空间
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|