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_connect() 傳回的 LDAP\Connection 實例。

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 resource
8.1.0 entry 參數現在需要一個 LDAP\ResultEntry 實例;先前,需要一個有效的 ldap result entry resource

範例

範例 #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 = "現在是其他東西了";
$values = ldap_get_values($ds, $entry, "attirib1");
// 執行其他操作
} while ($entry = ldap_next_entry($ds, $entry));

如果您將搜尋資源 $sr 變更為其他內容,即使它不再使用,它也會導致頁面當掉,它會是一個空白頁面,如果您檢視程式碼,您會根據某些不知道是什麼的東西而獲得不同的結果。

這件事不斷發生,我忘記我曾經使用過 $sr,所以我又在使用它,而且當我使用 ldap_get_values 時,它就是不會顯示頁面,如果這是個功能,那應該要讓我知道。我還沒看過其他函式發生這種情況。
To Top