我一开始没有立即意识到 ldap_get_values 函数不适用于二进制数据 - 只适用于字符串。如果您使用 ldap_get_values 获取二进制数据,您不会收到警告 - 只会得到一些垃圾数据。对于二进制数据,您必须使用 ldap_get_values_len。
(PHP 4, PHP 5, PHP 7, PHP 8)
ldap_get_values — 从结果条目中获取所有值
读取结果中条目中属性的所有值。
此调用需要一个 entry
,因此需要在 ldap 搜索调用和获取单个条目的调用之前进行。
您的应用程序将要么被硬编码为查找某些属性(例如“surname”或“mail”),要么您必须使用 ldap_get_attributes() 调用来确定给定条目存在哪些属性。
成功时返回属性值的数组,错误时返回 false
。可以通过在结果数组中索引“count”来找到值的个数。各个值通过数组中的整数索引访问。第一个索引为 0。
LDAP 允许一个属性有多个条目,因此它可以例如为一个人的目录条目存储多个电子邮件地址,所有这些地址都标有属性“mail”
return_value["count"] = number of values for attribute return_value[0] = first value of attribute return_value[i] = ith value of attribute
版本 | 描述 |
---|---|
8.1.0 | ldap 参数现在期望一个 LDAP\Connection 实例;以前,期望一个有效的 ldap link 资源。 |
8.1.0 | entry 参数现在期望一个 LDAP\ResultEntry 实例;以前,期望一个有效的 ldap result entry 资源。 |
示例 #1 列出目录条目的“mail”属性的所有值
<?php
// $ds 是指向目录服务器的有效 LDAP\Connection 实例
// $sr 是先前对
// ldap 目录搜索调用之一的有效搜索结果
// $entry 是先前对
// 返回目录条目的调用之一的有效条目标识符
$values = ldap_get_values($ds, $entry, "mail");
echo $values["count"] . " 个此条目的电子邮件地址。<br />";
for ($i=0; $i < $values["count"]; $i++) {
echo $values[$i] . "<br />";
}
?>
我一开始没有立即意识到 ldap_get_values 函数不适用于二进制数据 - 只适用于字符串。如果您使用 ldap_get_values 获取二进制数据,您不会收到警告 - 只会得到一些垃圾数据。对于二进制数据,您必须使用 ldap_get_values_len。
好吧,我花了一段时间才找到问题所在,所以我发布出来以防其他人遇到同样的问题。
$sr = ldap_search($ds, "cn=me", "(objectclass=*)");
$entry = ldap_first_entry($ds, $sr);
do {
// 执行其他操作
$sr = "something else now";
$values = ldap_get_values($ds, $entry, "attirib1");
// 执行其他操作
} while ($entry = ldap_next_entry($ds, $entry));
即使不再使用,如果您将搜索资源 $sr 更改为其他内容,它也会破坏页面,它将是一个空白页面,如果您查看代码,您会根据某些不知道什么的东西得到不同的结果。
这不断发生,我忘记了我使用了 $sr,所以我再次使用了它,每当我使用 ldap_get_values 时,它都不会显示页面,如果这是一个特性,最好知道。我没有看到它发生在其他函数上。