仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1357|回复: 20
打印 上一主题 下一主题

[学习教程] PHP编程:利用PHP毗连LDAP办事器

[复制链接]
冷月葬花魂 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:58:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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
兰色精灵 该用户已被删除
沙发
发表于 2015-2-4 07:46:56 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
山那边是海 该用户已被删除
板凳
发表于 2015-2-4 21:45:49 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
冷月葬花魂 该用户已被删除
地板
 楼主| 发表于 2015-2-7 03:00:21 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
admin 该用户已被删除
5#
发表于 2015-2-7 04:19:21 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
小魔女 该用户已被删除
6#
发表于 2015-2-8 06:15:30 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
海妖 该用户已被删除
7#
发表于 2015-2-11 08:04:26 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
小女巫 该用户已被删除
8#
发表于 2015-2-28 14:57:54 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
深爱那片海 该用户已被删除
9#
发表于 2015-3-9 23:53:31 | 只看该作者
实践是检验自己会不会的真理。
透明 该用户已被删除
10#
发表于 2015-3-11 06:28:32 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
谁可相欹 该用户已被删除
11#
发表于 2015-3-17 22:11:53 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
爱飞 该用户已被删除
12#
发表于 2015-3-25 03:52:01 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
13#
发表于 2015-3-25 19:09:53 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
因胸联盟 该用户已被删除
14#
发表于 2015-3-26 13:25:52 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
愤怒的大鸟 该用户已被删除
15#
发表于 2015-3-30 07:46:33 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
简单生活 该用户已被删除
16#
发表于 2015-4-8 14:42:33 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
再见西城 该用户已被删除
17#
发表于 2015-4-16 20:32:12 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
活着的死人 该用户已被删除
18#
发表于 2015-4-25 14:33:50 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
莫相离 该用户已被删除
19#
发表于 2015-4-26 20:31:06 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
精灵巫婆 该用户已被删除
20#
发表于 2015-5-11 21:30:04 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 13:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表