Php 仅使用服务器信息加载ldap树

Php 仅使用服务器信息加载ldap树,php,ldap,Php,Ldap,我一直在检查jxplorer,我刚刚意识到该软件加载所有ldap树,其中只包含您的服务器信息(IP、端口),我想知道如何使用php实现这一点 任何线索都将不胜感激 提前谢谢 Jxplorer很可能通过从LDAP服务器的RootDSE请求namingContexts来实现这一点。NamingContext是服务器为其提供数据库服务的根DN,例如o=部门,ou=公司,c=美国。使用此信息,应用程序接下来可以执行常规LDAP搜索以获取整个LDAP树 LDAP服务器可以承载多个LDAP数据库,每个数据库

我一直在检查jxplorer,我刚刚意识到该软件加载所有ldap树,其中只包含您的服务器信息(IP、端口),我想知道如何使用php实现这一点

任何线索都将不胜感激


提前谢谢

Jxplorer很可能通过从LDAP服务器的
RootDSE
请求
namingContexts
来实现这一点。NamingContext是服务器为其提供数据库服务的根DN,例如o=部门,ou=公司,c=美国。使用此信息,应用程序接下来可以执行常规LDAP搜索以获取整个LDAP树

LDAP服务器可以承载多个LDAP数据库,每个数据库都在不同的DN下提供服务,因此在搜索结果中,“namingContexts”属性可能包含多个值

要从LDAP服务器请求RootDSE,只需使用空的搜索库和搜索筛选器进行搜索:
(objectClass=*)
。不过,服务器可能不会响应此类请求:服务器的访问控制列表中的简单更改会阻止提供此信息

PHP中的一个基本但完整的示例,用于请求所服务的所有LDAP数据库的根DN:

<?php

$ldapconn = ldap_connect('ldaps://example.com');
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);

$result = ldap_read($ldapconn, '', '(objectclass=*)', array('namingContexts'));
$data = ldap_get_entries($ldapconn, $result);  # ldap_read returns max 1 entry

echo "Naming Contexts: <br/>";
$count = $data[0]['namingcontexts']['count'];
for ($i = 0; $i < $count; $i++) {
    echo $data[0]['namingcontexts'][$i], "<br/>";
}

ldap_close($ldapconn);

?>

有关RootDSE的更多信息:


太棒了!!我将检查脚本和提供的链接。非常感谢!!