LDAP服务架设
目前我只是使用OpenDS 2.2.0简单运行起来而已,这样就成了一个LDAP服务了。
打开OpenDS控制台,在OpenDS_HOME/bat/control-panel.bat
- 列表和计算条目数目
<?php header("content-type:text/html;charset=utf-8"); if(!extension_loaded("ldap")){ if(substr(PHP_OS, 0,3)=="WIN"){ dl("php_ldap.dll"); }else{ dl("php_ldap.so"); } }else{ echo "ldap 已经安装。<br/>"; } $ldap = ldap_connect("localhost",389) or die("Could not connect to LDAP Server: "); if($ldap){ echo "连接到ldap服务器。<br/>"; $ldap_bind = ldap_bind($ldap, "cn=admin", "gbit"); if($ldap_bind){ echo "ldap binded successfully.<br/>"; $sr = ldap_list($ldap, "dc=example,dc=com", "sn=*"); echo "有".ldap_count_entries($ldap, $sr)."记录<br />"; //print_r($sr); $info = ldap_get_entries($ldap, $sr); //print_r($info["count"]); for($i=0;$i<$info["count"];$i++){ print_r( $info[$i]["cn"][0]); } }else{ echo "ldap binded failed.<br/>"; } ldap_unbind($ldap); } $i=1; $password="password"; echo $password{$i}; //ldap_close($ldap); ?>
- 添加一个简单的条目
<?php $ds = ldap_connect("localhost",389) or die("Could not connect to LDAP Server: "); if($ds){ $r = ldap_bind($ds,"cn=admin","gbit"); // 在添加一个条目时,cn、sn、objectClass是必填属性,每个属性都是一个对象数组。 // 添加姓名全称 $info["cn"][0]="John jeniess"; // 添加姓氏 $info["sn"][0]="jeniess"; // 添加对象类,此对象类用描述该条目的性质。 $info["objectClass"][0]="top"; $info["objectClass"][1]="inetOrgPerson"; $info["objectClass"][2]="organizationalPerson"; $info["objectClass"][3]="person"; // 个人条目 if(ldap_add($ds, "cn=John jeniess,dc=example,dc=com", $info)){ echo "添加成功~"; } ldap_close($ds); } ?>
- 修改条目
<?php $ds = ldap_connect("localhost",389) or die("Could not connect to LDAP Server: "); if($ds){ $r = ldap_bind($ds,"cn=admin","gbit"); $info["cn"][0]="John jeniess1"; // 添加姓氏 $info["sn"][0]="jeniess1"; // 添加对象类,此对象类用描述该条目的性质。 $info["objectClass"][0]="top"; $info["objectClass"][1]="inetOrgPerson"; $info["objectClass"][2]="organizationalPerson"; $info["objectClass"][3]="person"; // 个人条目 // 编辑时不能在根目录中操作(RDN= Root DN),即必需要先有A分组,然后才能对A分组的条目进行修改。ou相当于dc为j的People分组。 if(ldap_modify($ds, "uid=user.4,ou=People,dc=j", $info)){ echo "编辑成功~"; } ldap_close($ds); } ?>
- 删除条目
<?php $ds = ldap_connect("localhost",389) or die("Could not connect to LDAP Server: "); if($ds){ $r = ldap_bind($ds,"cn=admin","gbit"); $dn = "uid=user.5,ou=People,dc=j"; // 删除方法比较简单,直接输入条目的dn路径的就可以了。 if(ldap_delete($ds, $dn)){ echo "删除成功~"; } ldap_close($ds); } ?>
- 增加条目属性
<?php $ds = ldap_connect("localhost",389) or die("Could not connect to LDAP Server: "); if($ds){ $r = ldap_bind($ds,"cn=admin","gbit"); // 添加属性时,只需要把想要添加的属性增加到数组中即可。 $info["st"][0]="jeniess address"; if(ldap_mod_add($ds, "cn=John jeniess,dc=example,dc=com", $info)){ echo "条目属性添加成功~"; } ldap_close($ds); } ?>
- 修改条目属性
<?php $ds = ldap_connect("localhost",389) or die("Could not connect to LDAP Server: "); if($ds){ $r = ldap_bind($ds,"cn=admin","gbit"); // 修改属性时,只需要把想要添加的属性增加到数组中即可。 $info["st"][0]="jeniess address 111"; // 此方法与增加属性的方法相当 if(ldap_mod_replace($ds, "cn=John jeniess,dc=example,dc=com", $info)){ echo "条目属性编辑成功~"; } ldap_close($ds); } ?>
- 删除条目属性
<?php $ds = ldap_connect("localhost",389) or die("Could not connect to LDAP Server: "); if($ds){ $r = ldap_bind($ds,"cn=admin","gbit"); // 删除条目属性时,需要把它的value值也加进来才行,不然会认为没有此属性。 $info["st"][0]="jeniess address 111"; if(ldap_mod_del ($ds, "cn=John jeniess,dc=example,dc=com", $info)){ echo "条目属性删除成功~"; } ldap_close($ds); } ?>
LDAP的数据结构
标准键 值 描述 o gbit 组织 organization的单词首字母 ou db center 组织单位 organization unit的两个单词首字母 l amoy fujian china 城市/所在地(location) uid linzq 用户名。应该是用到验证的用户名,与我们在数据库中用于登陆的用户名一样。 c zh-cn 国家(country) cn 林忠青 用户全名 sn 林 用户名中的姓 st available 状态,用户的使用状态(status) givenName 忠青 用户名中的名字 employeeNumber A445 员工编号 employeeType 员工类型 description 描述 mail linzq@gbit.com 邮箱地址 telephoneNumber 13799265585 电话 facsimileTelephoneNumber 传真号码 mobile 移动电话号码 pager 寻呼机号码 photo 相片(应该是存放相片的字节流) postalAddress 邮政地址 postalCode 邮政编码 homePhone 住宅电话号码 roomNumber 门牌号 preferredLanguage zh-cn 母语 street 街道地址 entryDN cn=林忠青,dc=example,dc=com 唯一标识 entryUUID b2d07f19-0214-425b-a652-409a84ed9ac4 全局ID值 userPassword e1NTSEF9aXUwSlNPWEEzejRBQlhOemd
0Q3NDaXdENUh1cmo4Y2labTBzeWc9PQ==用户密码