PHP中的LDAP功能函
一、LDAP简介LDAP是轻量级目录访问协议,应用于目录服务中.目录是一种特殊的数据库,它
将数据信息保存在一个树状结构中。这种结构和计算机硬盘的目录结构相似。在
一个全球的目录中,根目录就是整个世界,第一级子目录就是各个国家.底一级
的目录结构中就包含有记录公司、组织或者地方的相关信息的目录项。更低一级
的目录结构中的目录项就可以记录个人、设备或者文档的信息.
为了访问存放在硬盘上一个子目录中的文件,可能要用到下面的引用方法:
/usr/local/myapp/docs
上面的引用方法是用"/"将目录节点分开,读的顺序是从左到右.
与访问文件的引用方法相对应,访问一个LDAP目录中的目录项的引用就是可区分
名(distinguished name),简写为"DN".下面就是一个例子:
cn=John Smith,ou=Accounts,o=My Company,c=US
上面的引用方法是用逗号来将各个目录节点分开,读的顺序是从右到左,就象下
面的读法:
country = US
organization = My Company
organizationalUnit = Accounts
commonName = John Smith
就象没有规定死的规则来组织硬盘上的目录结构一样,在一个目录服务器可以建立
很多符合目的要求的信息模型结构,但是建立信息模型结构是要有一定的约定.这
就是说,如果要写出访问目录服务器中信息的代码,就必需了解目录服务器中的信
息模型结构,这和使用数据库进行开发是一样的道理.
完整的例子
例子是从目录服务器中检索出属性"sn"以"S"为第一个字母的所有目录项,并显
示目录项中"cn"和"mail"属性的属性值.
Example 1. LDAP search example
t?php
// basic sequence with LDAP is connect, bind, search, interpret search
// result, close connection
echo "th3>LDAP query testt/h3>";
echo "Connecting ...";
$ds=ldap_connect("localhost"); // must be a valid LDAP server!
echo "connect result is ".$ds."tp>";
if ($ds) {
echo "Binding ...";
$r=ldap_bind($ds); // this is an "anonymous" bind, typically
// read-only access echo "Bind result is
echo "Bind result is ".$r."tp>";
echo "Searching for (sn=S*) ...";
// Search surname entry
$sr=ldap_search($ds,"o=My Company, c=US", "sn=S*");
echo "Search result is ".$sr."tp>";
echo "Number of entires returned is ".ldap_count_entries($ds,$sr)."tp>";
echo "Getting entries ...tp>";
$info = ldap_get_entries($ds, $sr);
echo "Data for ".$info["count"]." items returned:tp>";
for ($i=0; $i<$info["count"]; $i++) {
echo "dn is: ". $info[$i]["dn"] ."tbr>";
echo "first cn entry is: ". $info[$i]["cn"][ 0] ."tbr>";
echo "first email entry is: ". $info[$i]["mail"][ 0] ."tp>";
}
echo "Closing connection";
ldap_close($ds);
} else {
echo "th4>Unable to connect to LDAP servert/h4>";
}
?>