使用PHP连接LDAP服务器

本文介绍了如何使用PHP连接和操作LDAP服务器,从基础的连接设置到实际的数据操作,帮助开发者理解如何在PHP环境中实现LDAP集成。
摘要由CSDN通过智能技术生成
http://www.justwinit.cn/post/591/

本文将演示如何使用php连接一个ldap服务器。具体的例子是连接到一个公共的ldap服务器并且进行搜索。这个例子模拟的是netscape communicator 4.*,通过自己的地址本连接到ldap资源。
ldap介绍


  可能不少人已经听说过ldap,但是却不了解它具体是什么东东和如何工作。在这里我将不会很详细地介绍ldap,只是对该协议做一个简介。


  ldap是一个用来发布目录信息到许多不同资源的协议。通常它都作为一个集中的地址本使用,不过根据组织者的需要,它可以做得更加强大。


  ldap最基本的形式是一个连接数据库的标准方式。该数据库为读查询作了优化。因此它可以很快地得到查询结果,不过在其它方面,例如更新,就慢得多。要特别注意的是,ldap通常作为一个hierarchal数据库使用,而不是一个关系数据库。因此,它的结构用树来表示比用表格好。正因为这样,就不能用 sql语句了。


  简单说来,ldap是一个得到关于人或者资源的集中、静态数据的快速方式。


要求


   phpv.4(以前的版本也可以,不过没有经过测试),编译支持ladp,即使用编译时带--with-ldap公共的ldap目录。在例子中提供了两个。


例子概览


1.设置公共ldap服务器的信息
2.创建一个ldap查询
3.连接到ldap服务器
4.如果连接成功,处理查询
5.格式化输出
6.关闭连接
7.设计搜索界面的html表格
8.显示结果


设置公共ldap服务器的信息


  我们要做的第一件事情是定义所有欲搜索的ldap服务器的信息


"ldap_name" = 新的ldap项目的名字
"ldap_server" = 新的ldap项目的ip地址或者主机名
"ldap_root_dn" = 新的ldap项目的根的辨识名


<?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] = "";






//如果没有选择服务器的话将它设置为0
if(!$server_id)
$server_id=0;


?>


建立ldap查询


  前面已经提到,ldap查询与sql查询是不一样的。因此,语句要受到一定的限制,以下是一个基本的例子。


//create query $ldap_query = "cn=$common";


  在我们的例子中,“cn”是我们要进行搜索的属性,而$common是由搜索的form中得到的字符串变量。ldap的查询语句语句可使用通配符‘*’。例如‘$stanley’将可以找出‘dan stanley’。


连接到ldap服务器


  以下的函数连接到一个ldap资源,并且将连接的识别号赋给一个变量,就好象连接到一个通常的数据库一样,例如mysql。


<?php


//连接到ldap
$connect_id = ldap_connect($ldap_server[$server_id]);


?>


  在我们的例子中,“$connect_id”是连接的识别号,$ldap_server是可能的ldap服务器数组,而$server_id是由搜索表格得到的ldap服务器变量。


如果连接成功,处理查询


   如果连接成功的话,我们将得到一个有效的ldap连接识别号,这样我们就可以处理查询。


<?php


if($connect_id)
{
//认证
$bind_id = ldap_bind($connect_id);


//执行搜索
$search_id = ldap_search($connect_id, $ldap_root_dn[$server_id], $ldap_query);


//将结果集合分配给一个数组
$result_array = ldap_get_entries($connect_id, $search_id);
}
else
{
//显示连接错误
echo "could not connect to ldap server: $ldap_server[$server_id]";
}


?>


  一旦我们与ldap服务器建立好连接,我们就必须进行认证。php在连接大多数的数据库时,都是通过发送用户名和密码来进行的。不过,在ldap中,认证是未知的,直到进行一个bind操作。在我们的例子中,“$bind_id”是绑定连接的标识符。我们是通过匿名绑定到公共的ldap服务器的。因此,在执行ldap_bind()时,只使用连接识别号就可以了,无需其它的参数。


  在经过认证后(这里是匿名的),我们就可以使用ldap_search()函数来执行查询,产生的$search_id是我们搜索的连接识别符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值