PHP编程:利用PHP毗连LDAP办事器
咱们就开始学习动态语言的概念吧,刚一接触动态语言,可能很多人都会蒙了,怎么这乱七八糟的东西,在网页里显示的时候却是另外一码事?其实这并不算乱七八糟,你写的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 = "Netscape Net Center";
$LDAP_SERVER = "memberdir.netscape.com";
$LDAP_ROOT_DN = "ou=member_directory,o=netcenter.com";
$LDAP_NAME = "Bigfoot";
$LDAP_SERVER = "ldap.bigfoot.com";
$LDAP_ROOT_DN = "";
//假如没有选择办事器的话将它设置为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["cn"] = "Dannie Stanley"
["dn"] = "uid=dannie,dc=spinweb.net"
["givenname"] = "Dannie"
["sn"] = "Stanley"
["mail"] = "danSPAM@spinweb.net"
$result_array["cn"] = "Michael Reynolds"
["dn"] = "uid=michael,dc=spinweb.net"
["givenname"] = "Michael"
["sn"] = "Reynolds"
["mail"] = "michaelSPAM@spinweb.net"
数据以这类格局寄存的缘由是每一个属性都能够有超越一个值(象树的布局)。例如,假如我的名字是‘Dannie’,我还可以在LDAP中增添一些属性,例如:
$result_array["cn"] = "Dannie Stanley"
["dn"] = "uid=dannie,dc=spinweb.net"
["givenname"] = "Dannie"
["givenname"] = "Dan"
["sn"] = "Stanley"
["mail"] = "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 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 实践是检验自己会不会的真理。 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己 最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。 写的比较杂,因为我也是个新手,不当至于大家多多指正。 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
页:
[1]
2