我沒有立即明白 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 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 />";
}
?>
我沒有立即明白 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 = "現在是其他東西了";
$values = ldap_get_values($ds, $entry, "attirib1");
// 執行其他操作
} while ($entry = ldap_next_entry($ds, $entry));
如果您將搜尋資源 $sr 變更為其他內容,即使它不再使用,它也會導致頁面當掉,它會是一個空白頁面,如果您檢視程式碼,您會根據某些不知道是什麼的東西而獲得不同的結果。
這件事不斷發生,我忘記我曾經使用過 $sr,所以我又在使用它,而且當我使用 ldap_get_values 時,它就是不會顯示頁面,如果這是個功能,那應該要讓我知道。我還沒看過其他函式發生這種情況。