欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

使用PHP连接LDAP服务器(续)_PHP

程序员文章站 2024-02-10 21:44:58
...
LDAP 在我们的例子中$format_array是我们建立的新数组里面包括有查询的结果并且被格式化用作输出。首先循环$result_array中的每个元素并且将它分配给一个两维的数组用作排序。同时我们使用strtolower()函数将所有的值变为小写。



  接着
我们使用PHP自带的一个称为sort()的函数进行排序。首个参数是要排序的数组另一个是要执行的排序类型该类型是由PHP的文档定义的。由于我们根据字符串排序我们使用“SORT_STRING”。



  第三
我们循环已经格式化好的数组并且将它分配给一个名字为$result_list的输出字符该字符包含了HTML描述。要特别注意的是在超链接中我使用的是ldap的URL格式。这个格式的例子类似HREF="ldap://ldap.domain.net/uid=dannie,dc=domain.net"



关闭连接



  现在我们所有的数据已经包含在$result_list中了我们可以安全地关闭LDAP的连接。



php



//关闭连接

ldap_close($connect_id);





定制搜索界面的HTML表格



  最后,我们要定制搜索用的HTML表格,它是用来给用户执行搜索的。





//定制表格

echo " <CENTER><FORM action='"$PHP_SELF"' method='"GET"'>";

echo "Search in:<SELECT name='"SERVER_ID"'>"; //循环以建立SELECT选项 for($i=0; $i<COUNT($LDAP_NAME); <br $i++)> echo "<OPTION selected value='"$i"'>".$LDAP_NAME[$i]."</OPTION>"; echo "</SELECT>

";

echo "Search for:<INPUT name='"common"' type='"text"'>";

echo "<INPUT name='"lookup"' type='"submit"' value='"go"'>

";

echo "(You can use * for wildcard searches, ex. * Stanley will find all Stanleys)

";

echo "</FORM></CENTER>";







  代码中的$PHP_SELF是一个全局的常量
代表的是脚本页面自身其中的循环是用来通过我们的$LDAP_NAME变量创建SELECT选项。



显示结果



  现在所有的工作已经完成了
我们将打印出结果集。如果没有符合的结果将会显示"No Results"的信息。



>php



//显示结果

if($result_list)

{

echo " <CENTER><TABLE border='"1"' cellPadding='"10"' cellSpacing='"0"'

BGCOLOR="#FFFFEA" WIDTH="450"> <TBODY><TR><TD>$result_list</TD></TR>

</TBODY></TABLE></CENTER>";

}

else

echo "No Results";









源代码



  以下是完整的源代码
只要将它剪切并粘贴到一个HTML文档就可以尝试一下了。



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_query = "cn=$common";



//连接到LDAP

$connect_id = ldap_connect($LDAP_SERVER[$SERVER_ID]);



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]";

}



//如果搜索成功,将结果排序

if($result_array)

{

for($i=0; $i {

$format_array[$i][0] = strtolower($result_array[$i]["cn"][0]);

$format_array[$i][1] = $result_array[$i]["dn"];

$format_array[$i][2] = strtolower($result_array[$i]["givenname"][0]);

$format_array[$i][3] = strtolower($result_array[$i]["sn"][0]);

$format_array[$i][4] = strtolower($result_array[$i]["mail"][0]);

}



//排序数组

sort($format_array, "SORT_STRING");



for($i=0; $i {

$cn = $format_array[$i][0];

$dn = $format_array[$i][1];

$fname = ucwords($format_array[$i][2]);

$lname = ucwords($format_array[$i][3]);

$email = $format_array[$i][4];



if($dn && $fname && $lname && $email)

{

$result_list .= "<A href='/"ldap://$LDAP_SERVER[$SERVER_ID]/$dn/"'>$fname $lname</A>";

$result_list .= "

";

}

elseif($dn && $cn && $email)

{

$result_list .= "<A href='/"ldap://$LDAP_SERVER[$SERVER_ID]/$dn/"'>$cn</A>";

$result_list .= "
";

}

}

}

else

{

echo "Result set empty for query: $ldap_query";

}



//关闭连接

ldap_close($connect_id);



//定制表格

echo " <CENTER><FORM action='"$PHP_SELF"' method='"GET"'>";

echo "Search in:<SELECT name='"SERVER_ID"'>"; //循环以建立SELECT选项 for($i=0; $i echo "<OPTION selected value='"$i"'>".$LDAP_NAME[$i]."</OPTION>"; echo "</SELECT>

";

echo "Search for:<INPUT name='"common"' type='"text"'>";

echo "<INPUT name='"lookup"' type='"submit"' value='"go"'>

";

echo "(You can use * for wildcard searches, ex. * Stanley will find all Stanleys)

";

echo "</FORM></CENTER>";



//显示结果

if($result_list)

{

echo " <CENTER><TABLE border='"1"' cellPadding='"10"' cellSpacing='"0"'

BGCOLOR="#FFFFEA" WIDTH="450"> <TBODY><TR><TD>$result_list</TD></TR>

</TBODY></TABLE></CENTER>";

}

else

echo "No Results";

}