2024 年 PHP Conference Japan

LDAP 控制

控制項是特殊的物件,可以與 LDAP 請求一起傳送,以便在執行請求時更改 LDAP 伺服器的行為。伺服器也可能會在回應中傳送控制項,以提供更多資訊,通常是用於回應請求中的控制項物件。

注意:

並非所有 LDAP 伺服器都支援所有控制項。要了解伺服器支援哪些控制項,您需要使用過濾器 (objectClass=*) 讀取空的 dn 來查詢根 DSE。

範例 #1 測試對分頁結果控制項的支援

<?php

// $ds 是一個有效的目錄伺服器連結識別碼

$result = ldap_read($ds, '', '(objectClass=*)', ['supportedControl']);
if (!
in_array(LDAP_CONTROL_PAGEDRESULTS, ldap_get_entries($ds, $result)[0]['supportedcontrol'])) {
die(
"此伺服器不支援分頁結果控制");
}

?>

從 PHP 7.3 開始,您可以在所有請求函式中使用 controls 參數來發送控制項。當函式的擴充版本存在時,如果您想存取完整的回應物件並能夠使用 ldap_parse_result() 解析其中的回應控制項,則應該使用它。

controls 必須是一個陣列,其中包含要發送的每個控制項的陣列,每個陣列包含以下鍵值:

oid (字串)
控制項的 OID。您應該使用以 LDAP_CONTROL_ 開頭的常數。請參閱 LDAP 常數
iscritical (布林值)
如果一個控制項被標記為關鍵,則如果伺服器不支援該控制項,或者應用失敗,請求將會失敗。請注意,某些控制項應始終標記為關鍵,如引入它們的 RFC 中所述。預設為 false
value (混合)
如果適用,則為控制項的值。請閱讀下文以了解更多資訊。

大多數控制項值會以 BER 編碼傳送到伺服器。您可以自行對值進行 BER 編碼,或者您可以傳遞一個具有正確鍵值的陣列,以便系統為您完成編碼。支援以陣列形式傳遞的控制項如下:

以下控制項不需要任何值:

控制項 LDAP_CONTROL_PROXY_AUTHZ 是一個特殊情況,因為它的值不需要 BER 編碼,因此您可以直接使用字串作為它的值。

ldap_parse_result() 解析控制項時,如果支援,值會轉換為陣列。支援以下控制項:

新增註釋

使用者貢獻的註釋

此頁面沒有使用者貢獻的註釋。
To Top