广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 4202 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
t0306894 手机
个人文章 个人相簿 个人日记 个人地图
特殊贡献奖
头衔:
版主
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[SQL][教学] 用PHP如何操作LDAP
1. 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 = testmail@mccc.net
othermailbox = testmailother@mccc.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中如何搜索用户资讯

<?php
$ds=ldap_connect("10.31.172.30:1000");
//首先连接上伺服器
$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 添加用户
<?php
$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 删除用户
<?php
$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 用户登录验证
<?php
$ds=ldap_connect("10.31.172.30:1000");
//首先连接上伺服器
if (ldap_bind($ds,"cn=dingxf,o=jite","dingxf")){
  echo "验证通过";
}else{
  echo "验证不通过";
}
ldap_unbind($ds);
//取消绑定
ldap_close($ds);
//关闭连接
?>



介绍大家一个透过facebook来玩的网页游戏 : 海盗王
献花 x0 回到顶端 [楼 主] From:台湾中华电信 | Posted:2005-02-07 20:41 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.071183 second(s),query:15 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言