用户名:  密码:   
您当前的位置:首页 > 网页设计 >  PHP > 

第23讲 LDAP目录访问协议,需要下载安装配置,加载绑定连接关闭,配置函数,添加,更新,删除LDAP数据

上次修改时间: 2016-03-22 11:14:39      来源:网络总结      作者:钢铁长陈
上一页      路径:DSD\Learn\PHP相关\      下一页

LDAP目录访问协议,需要下载安装配置,加载绑定连接关闭,配置函数,添加,更新,删除LDAP数据

23.1 LDAP简介  全称Lightweight Directory Access Protocol,一种轻量的目录访问协议
1) 轻量级目录访问协议,目录是特殊的数据库系统,采用树型结构来存取数据。
2) 目录与关系型数据库不同的是,目录只执行简单的更新操作,适合进行大量数据的检索

23.2 LDAP服务器的安装与配置
1) LDAP是跨平台的标准协议,可以windows,linux等多种系统上使用,
2) 这里使用openLDAP在windows上开发为例,下载地址:http://www.openldap.org/
3) 这里以openldap-2.2.29版为例安装:
 Setup——OpenLDAP——I accept the agreement,
 Select Destination Location //选择安装路径
 Select Components——Select Start Menu Folder //这里选择是否建立开始菜单
 Select Additional Tasks //这里会询问是否开机启动和创建桌面图标
3) 运行:把系统服务里,右击OpenLDAP Directory Service启动该服务
4) 配置:在安装目录OpenLDAP中打开slapd.conf文件进行修改
 a. 先载入一些schema文件
  include ./schema/core.schema
  include ./schema/corba.schema
  include ./schema/cosine.schema
  include ./schema/inetorgperson.schema
  include ./schema/misc.schema
  include ./schema/openldap.schema
  include ./schema/nis.schema
 b. 配置LDAP根目录
  suffix "dc=spcn,dc=tm"
 c. 设置目录管理账号和密码
  rootdn "cn=tm,dc=spcn,dc=tm"  //这里的cn=tm是目录,dc=spcn,dc=tm是账号
  rootpw 111  //这里的管理员密码
 d. 设置完成后在系统服务里重启OpenLDAP Directory Service服务
5) 测试LDAP服务器是否正常工作方法,要先切换到LDAP安装目录OpenLDAP下
 cmd下输入: ldapsearch -x -b "" -s base(objectclass=*) namingContexts

23.3 PHP与LDAP
1) 在PHP中加载LDAP
编辑php.ini将extension=php_ldap.dll前分号去掉,php版本大于4.3.0还要libeay32.dll和ssleay32.dll拷贝到system32目录下,
重启apache服务器,在phpinfo()查看ldap相关的项确认加载成功
2) 连接LDAP服务器,通过ldap_connect()函数
语法格式: Resource ldap_connect([string hostname[, int port]])  //这里的hostname为LDAP服务器地址,port为服务器端口,默认389
例:
 $l_host = "ladp://127.0.0.1";
 $l_port = "389";
 $l_conn = ldap_connect($l_host,$l_port);
 if($l_conn)
  echo 'LDAP服务器连接成功';
 else
  echo '服务器连接失败';

3) 绑定LDAP服务器:连接服务器后还要使用绑定函数ldap_bind()绑定服务器才能查询或添加数据,
 //主要作用类似输出用户和密码登录
 函数格式: bool ldap_bind(resource link [, string rootdn [,string rootpw]])
//参数link为连接服务器函数创建的资源对象,参数rootdn为目录管理员,参数rootpw是密码
例:
 $l_host = "ladp://127.0.0.1";
 $l_port = "389";
 $l_rootdn = "cn=tm,dc=spcn,dc=tm";
 $l_rootpw = "111";
 $l_conn = ldap_connect($l_host,$l_port) or die("Connect error!");
 ldap_set_option($l_conn,LDAP_OPT_PROTOCOL_VERSION,3);
 $boo = ladp_bind($l_conn,$l_rootdn,$l_rootpw);
 if($boo) {
  echo '成功绑定服务器';
 }
 else
  echo '绑定失败。';

4) 配置函数,ldap_set_option()和ldap_get_option()函数 ,主要用来从变量中取参数值或配置PHP的LDAP参数
1) ldap_set_option()函数主要用来配置LDAP参数,如版本,服务器地址等
 格式:bool ladp_set_option (resource link, int option, mixed newval)
 //返回true表设置成功,false表设置不成功
 //参数link为连接服务器函数创建的资源对象,option是PHP中和LDAP有关的预定变量,Newval为option设定新值
2) ldap_get_option()函数作用是从变量中取参数值
 格式:bool ldap_get_option(resource link, int option, mixed &retval)
 //函数作用是获取某预定义变量option的值,link和option参数意思同ladp_set_option()函数,option为要获取值的变量,第三个参数为一个变量引用,用来保存获取的option值
3) LDAP预定义变量名
 LDAP_OPT_SIZELIMIT //限制搜索记录数
 LDAP_OPT_TIMSLIMIT //限制搜索时间
 LDAP_OPT_HOST_NAME //LDAP服务器主机名
 LDAP_OPT_ERROR_STRING //设置最后一条错误消息
 LDAP_OPT_PROTOCOL_VERSION //确定LDAP协议的版本号
 LDAP_OPT_RESTART //如果在I/O结束前发生错误是否自动重新启动
4)关闭ldap服务器的函数ldap_unbind()
语法:bool ldap_unbind(resource link) //link为连接源
//主要用在完成PHP与LDAP所有操作后,关闭服务器

5)操作LDAP数据库,查询,添加,删除,修改等
查询函数:resource ldap_search(resource link, string base_dn,string filter) //查询成功返回结果,失败返回false
//link为连接源,base_dn为要查找的最外层目录,filter为查询条件
例:conn.php代码
 $lhost = "ladp://127.0.0.1"; //LDAP服务器地址
 $lport = "389"; //服务器端口号
 $luser = "cn=tm,dc=spcn,dc=tm"; //管理员账号
 $lpwd = "111"; //管理员密码
 $l_conn = ldap_connect($lhost,$lport) or die("Connect error!"); //连接服务器
 ldap_set_option($lconn,LDAP_OPT_PROTOCOL_VERSION,3); //设置协议版本号
 ladp_bind($lconn,$luser,$lpwd) or die('bind error'); //绑定服务器
例2:index.php代码
 include_once "conn.php";
 $dn = "cn=ss,ou=people,dc=spcn,dc=tm";
 $filter = "(objectClass=inetOrgPerson)";
 $rst = ldap_search($lconn,$dn,"(objectClass=*)");
 $rst1 = ldap_first_entry($lconn,$rst);
 $mobile = ldap_get_values($lconn,$rst1,"mobile");
 print_r($mobile);

6) 处理结果函数
ldap_get_entries() 作用是将结果集放在一个数组,失败返回false
 语法:array ldap_get_entries(resource link,resource resut)
ldap_first_entry()返回结果集中第一个函数
 语法:resource ldap_first_entry(resource link, resource result)
ldap_get_values()处理查询结果集,对数组形式返回
 语法:array ldap_get_values(resource link,resource result,string attribute) //attribute为要查找的属性值

7) 添加LDAP数据
 语法:bool ldap_add ( resource link, string dn, array entry ) //添加一LDAP目录,成功返回true,失败返回false
 //link为数据源,dn为要添加的目录,entry为添加的目录项
例:
 include_once "conn.php";
 $add["ou"] = "myhome";
 $add["objectclass"] = "organizationalUnit";
 $boo = ldap_add($lconn, "ou=myhome,dc=spcn,dc=tm",$add) or die('add error');
 if($boo) {
  echo '添加成功';
 }else{
  echo '添加失败';
 }
 ldap_unbind($lconn);

8) 更新LDAP数据
 语法:bool ldap_modify( resource link, string dn, array entry ) //修改一个LDAP目录,成功返回true,否则返回false
例:
 include_once "conn.php";
 $base_dn = "cn=ss,ou=people,dc=spcn,dc=tm";
 $modify['mail']='sp@spcn.tm';
 $modify['homePhone'] = '043212345678';
 $boo = ldap_modify($lconn, $base_dn,$modify);
 if($boo) {
  echo '修改成功';
 }else{
  echo '修改失败';
 }
9) 删除LDAP数据:
 语法:bool ldap_delete(resource link, string dn) //删除成功返回true,失败返回false
 include_once "conn.php";
 $base_dn = "ou=myhome,dc=spcn,dc=tm";
 $boo = ldap_delete($lconn, $base_dn);
 if($boo)
  echo '修改成功';
 else
  echo '修改失败';