|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
咱们就开始学习动态语言的概念吧,刚一接触动态语言,可能很多人都会蒙了,怎么这乱七八糟的东西,在网页里显示的时候却是另外一码事?其实这并不算乱七八糟,你写的HTML代码不也一样是一堆堆的字符吗?毕竟,代码并不是作为直接输出的,而是经过处理的,说白了,HTML是经过HTML解析器,而PHP当然也就通过PHP解析器了,跟学习HTML一样的道理,想让任何的解析器完成操作,就必须使用它们专用的语法结构,所以PHP长相奇怪也就不足为奇了。 本文将演示若何利用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是咱们搜刮的毗连辨认符。
然后,咱们利用ldap_get_entries()函数将了局集赋给$result_array变量。如许咱们可以以逻辑的体例分列信息,以便显示。
格局化输入
在履行完LDAP搜刮后,前往的数据是以查找的按次分列的。不外咱们在排序时没有SQL如许便利,利用ORDER BY语句就能够了。凡是多半公共的LDAP目次都没有尺度的巨细标准。排序是基于字符的ASCII值,咱们必需将字符全体格局化为小写,以便按字母的按次输入。
要出格注重的是,前往的LDAP了局集是一个多维的数组。因而,咱们剧本中的$result_array的布局以下:
$result_array[0]["cn"] [0] = "Dannie Stanley"
["dn"] [0] = "uid=dannie,dc=spinweb.net"
["givenname"][0] = "Dannie"
["sn"] [0] = "Stanley"
["mail"] [0] = "danSPAM@spinweb.net"
$result_array[1]["cn"] [0] = "Michael Reynolds"
["dn"] [0] = "uid=michael,dc=spinweb.net"
["givenname"][0] = "Michael"
["sn"] [0] = "Reynolds"
["mail"] [0] = "michaelSPAM@spinweb.net"
数据以这类格局寄存的缘由是每一个属性都能够有超越一个值(象树的布局)。例如,假如我的名字是‘Dannie’,我还可以在LDAP中增添一些属性,例如:
$result_array[0]["cn"] [0] = "Dannie Stanley"
["dn"] [0] = "uid=dannie,dc=spinweb.net"
["givenname"][0] = "Dannie"
["givenname"][0] = "Dan"
["sn"] [0] = "Stanley"
["mail"] [0] = "danSPAM@spinweb.net"
在咱们的搜刮中,咱们只关怀每一个属性的首个值,因而除dn只要一个值外,其它咱们只利用每一个属性中序号为0的值。以下就是属性和它们寄义的复杂列表:
<P class=code>"cn" = Common Name
"dn" = Distinguished Name
"givenname" = First Name
"sn" = Last Name
"mail" = Email地址
<?php
//假如搜刮胜利,将了局排序
if($result_array)
{
for($i=0; $i |
|