<?php
class ldap
{
private $hostName; //服务器地址
private $userDn; //用户名
private $pwd; //密码
private $port; //端口号
private $link; //返回的连接对象
public $state; //返回的一个公共的连接状态
//------------ 定义联接类的构造函数 ------------------
function __construct($hostName,$userDn,$pwd,$port=80)
{
$this->hostName=$hostName;
$this->userDn=$userDn;
$this->pwd=$pwd;
$this->port=$port;
$this->state=0;
}
//--------------- end conStruct -------------------
//-------------- 定义link方法 连接并BIND数据库 ----------------
function open()
{
/*********加上@阻止错误********///
$this->link = @ldap_connect($this->hostName);
@ldap_set_option($this->link, LDAP_OPT_PROTOCOL_VERSION, 3);
if ($this->link && @ldap_bind($this->link,$this->userDn,$this->pwd)) {
$ldapbind = @ldap_bind($this->link,$this->userDn,$this->pwd);
$this->state=1;
return $this->link;
@ldap_unbind($this->link); //关闭数据库
@ldap_close($this->link); //关闭连接
} else {
return $this->link;
//echo "抱歉,无法连上 LDAP 服务器。";
exit;
}
}
//--------------end open()--------------------------
}
//--------------------定义基类recordSet------------------------------
class recordSet
{
public $link;
private $result;
function __construct($conn)
{
$this->link=$conn->open();
}
//------ 定义execute 方法--------
public function execute($dn,$who)
{
$tdn=$dn;
$twho=$who;
$sr=ldap_search($this->link,$tdn,$twho);
$this->result = ldap_get_entries($this->link, $sr);
return $this->result;
}
//红色所标为关键部分///
public function arrsort($arr,$column)
{
for($j=0;$j<=$arr["count"];$j++){
for($i=0;$i< =@count($column);$i ++){
if($column[$i]=="dn"){
$array[$j][$i]=$arr[$j][$column[$i]];
} else {
$array[$j][$i]=$arr[$j][$column[$i]][0];
}
}
}
@sort($array);
return $array;
}
}
//-------------------- END 基类recordSet------------------------------
class selectRs extends recordSet
{
private $result; //返回的查询结果数组
//public $dn;
//public $who;
/ 执行继承类recordSet的execute($dn,$who)方法
function getArray($dn,$who)
{
$this->result=$this->execute($dn,$who);
return $this->result;
}
//---------*****************END EXECUTE($dn,$who)****************************-----------
//------ 定义 delete 方法--------
function delete($dn) // 传入一个详细的组织结构DN 删除成功则返回TRUE,否则返回FALSE
{
link,$dn">$state=@ldap_delete($this->link,$dn );
if($state){
return true;
} else {
return false;
}
}
//------ end delete 方法--------
//------ 定义 update 方法--------
function update($dn,$column) // 传入一个详细的组织结构DN及成员数组 成功则返回TRUE,否则返回FALSE
{
$state=ldap_modify($this->link,$dn,$column);
if($state){
return true;
} else {
return false;
}
}
//------ end update 方法--------
//------ 定义 insert 方法--------
function insert($dn,$column) // 传入一个详细的组织结构DN及成员数组 插入成功则返回TRUE,否则返回FALSE
{
$state=ldap_add($this->link,$dn,$column);
if($state){
return true;
} else {
return false;
}
}
//------ end insert 方法--------
/传回查询数据的总行数getRowNum()
function getRowNum()
{
return $this->result["count"];
}
end-------getRowNum()
/ 分页结果 START
function page($page,$arr,$column,$num=5)
{
if($page<1) $page=1;
$rownum=$this->getRowNum();
$pagecount=ceil($rownum/$num);
if($page>$pagecount) $page=$pagecount;
$a=$this->arrsort($arr,$column);
$start=($page-1)*$num+1;
$end=$page*$num;
for($i=$start;$i<=$end;$i++)
{
if($i>$rownum)
{
continue;
}
for($j=0;$j<=count($column)-1;$j++)
{
$array[$i][$j]=$a[$i][$j];
}
}
return $array;
}
/分页结果 END()
}
/* 以下是我想对分页的一个简化,可惜时间不够,没有能够完成,不过上面的代码对一般的增删改查分页都巳足够了
//-------------------- 继承 基类selectRs----执行分页类 待完善 今后会更新--------------------------
class pselectRs extends selectRs
{
private $result; //返回的查询结果数组
private $currentPage; //当前页码
public $absoultpage=5; //每页的记录数
private $isSystemPage; //是否用系统默认分页,否则需要自己定制
public $pagecount; //总页数
/ 重写继承类selectRs的getArray($dn,$who)方法
function getArray($dn,$who,$column,$currentPage=1,$isSystemPage=true)
{
$this->result=$this->execute($dn,$who);
$this->currentPage=$currentPage;
$this->isSystemPage=$isSystemPage;
$this->pagecount=ceil($this->getRowNum/$this->absoultpage);
if($this->currentPage<0) $this->currentPage=1;
if($this->currentPage>$this->pagecount) $this->currentPage=$this->pagecount;
$row=$this->arrsort($this->result,$column);
$start=($this->currentPage-1)*$this->absoultpage+1;
$end=$this->currentPage*$this->absoultpage;
for($i=$start;$i<=$end;$i++)
{
for($j=0;$j<=count($column)-1;$j++)
{
$arr[$i][$j]=$row[$i][$j];
}
}
return $arr;
}
//---------*****************END selectRs($dn,$who)****************************-----------
} */
?>