查看文章 |
LDAP 类--转载 (转载请注明:原创QQ405214421)
2008-06-12 14:19
<? 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 { $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)****************************----------- } */ ?> 转载请注明:原创QQ405214421: |
最近读者: