PHP Conference Japan 2024

ldap_get_values

(PHP 4, PHP 5, PHP 7, PHP 8)

ldap_get_values从结果条目中获取所有值

描述

ldap_get_values(LDAP\Connection $ldap, LDAP\ResultEntry $entry, string $attribute): array|false

读取结果中条目中属性的所有值。

此调用需要一个 entry,因此需要在 ldap 搜索调用和获取单个条目的调用之前进行。

您的应用程序将要么被硬编码为查找某些属性(例如“surname”或“mail”),要么您必须使用 ldap_get_attributes() 调用来确定给定条目存在哪些属性。

参数

ldap

一个 LDAP\Connection 实例,由 ldap_connect() 返回。

entry

一个 LDAP\ResultEntry 实例。

attribute

返回值

成功时返回属性值的数组,错误时返回 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 />";
}
?>

参见

添加笔记

用户贡献笔记 2 条笔记

software at inebria dot com
23 年前
我一开始没有立即意识到 ldap_get_values 函数不适用于二进制数据 - 只适用于字符串。如果您使用 ldap_get_values 获取二进制数据,您不会收到警告 - 只会得到一些垃圾数据。对于二进制数据,您必须使用 ldap_get_values_len。
viper_sb at IGETTOMUCHSPAMhotmail dot com
21 年前
好吧,我花了一段时间才找到问题所在,所以我发布出来以防其他人遇到同样的问题。

$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 时,它都不会显示页面,如果这是一个特性,最好知道。我没有看到它发生在其他函数上。
To Top