控制項是特殊的物件,可以與 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
必須是一個陣列,其中包含要發送的每個控制項的陣列,每個陣列包含以下鍵值:
false
。
大多數控制項值會以 BER 編碼傳送到伺服器。您可以自行對值進行 BER 編碼,或者您可以傳遞一個具有正確鍵值的陣列,以便系統為您完成編碼。支援以陣列形式傳遞的控制項如下:
LDAP_CONTROL_PAGEDRESULTS
預期的鍵值為 [size] 和 [cookie]
LDAP_CONTROL_ASSERT
預期的鍵值為 filter
LDAP_CONTROL_VALUESRETURNFILTER
預期的鍵值為 filter
LDAP_CONTROL_PRE_READ
預期的鍵值為 attrs
LDAP_CONTROL_POST_READ
預期的鍵值為 attrs
LDAP_CONTROL_SORTREQUEST
預期為一個陣列的陣列,每個子陣列具有鍵值 attr、[oid]、[reverse]。
LDAP_CONTROL_VLVREQUEST
預期的鍵值為 before、after、attrvalue|(offset, count)、[context]
以下控制項不需要任何值:
控制項 LDAP_CONTROL_PROXY_AUTHZ
是一個特殊情況,因為它的值不需要 BER 編碼,因此您可以直接使用字串作為它的值。
當 ldap_parse_result() 解析控制項時,如果支援,值會轉換為陣列。支援以下控制項:
LDAP_CONTROL_PASSWORDPOLICYRESPONSE
鍵值為 expire、grace、[error]
LDAP_CONTROL_PAGEDRESULTS
鍵值為 size、cookie
LDAP_CONTROL_PRE_READ
鍵值為 dn 及 LDAP 屬性名稱
LDAP_CONTROL_POST_READ
鍵值為 dn 及 LDAP 屬性名稱
LDAP_CONTROL_SORTRESPONSE
鍵值為 errcode、[attribute]
LDAP_CONTROL_VLVRESPONSE
鍵值為 target、count、errcode、context