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;
}
?>