使用PHP连接LDAP服务器
本文将演示如何使用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]"; } |
查看所有评论
