2024 PHP Conference Japan

ldap_exop

(PHP 7 >= 7.2.0, PHP 8)

ldap_exop執行延伸操作

說明

ldap_exop(
    LDAP\Connection $ldap,
    字串 $request_oid,
    字串 $request_data = null,
    陣列 $controls = null,
    字串 &$response_data = ?,
    字串 &$response_oid = ?
): 混合

對指定的 ldap 執行擴充操作,request_oid 為操作的 OID,request_data 為資料。

參數

ldap

一個 LDAP\Connection 實例,由 ldap_connect() 返回。

request_oid

擴充操作請求的 OID。您可以使用 LDAP_EXOP_START_TLSLDAP_EXOP_MODIFY_PASSWDLDAP_EXOP_REFRESHLDAP_EXOP_WHO_AM_ILDAP_EXOP_TURN 或一個包含您要傳送之操作 OID 的字串。

request_data

擴充操作請求的資料。對於某些操作(例如 LDAP_EXOP_WHO_AM_I)可以是 NULL,也可能需要進行 BER 編碼。

controls

要與請求一起發送的 LDAP 控制項 陣列。

response_data

如果提供,將會填入擴充操作的回應資料。如果未提供,您可以稍後在結果物件上使用 ldap_parse_exop 來取得此資料。

response_oid

如果提供,將會填入回應 OID,通常與請求 OID 相同。

返回值

response_data 一起使用時,成功時返回 true,錯誤時返回 false。不使用 response_data 時,返回結果識別碼,錯誤時返回 false

更新日誌

版本 說明
8.1.0 ldap 參數現在需要一個 LDAP\Connection 實例;以前需要一個有效的 ldap link 資源
7.3.0 新增了對 controls 的支援

範例

範例 #1 Whoami 擴充操作

<?php
$ds
= ldap_connect("localhost"); // 假設 LDAP 伺服器在此主機上

if ($ds) {
// 使用適當的 dn 綁定以授予更新權限
$bind = ldap_bind($ds, "cn=root, o=My Company, c=US", "secret");
if (!
$bind) {
echo
"無法綁定到 LDAP 伺服器";
exit;
}

// 呼叫 WHOAMI 擴充操作
$r = ldap_exop($ds, LDAP_EXOP_WHO_AM_I);

// 解析結果物件
ldap_parse_exop($ds, $r, $retdata);
// 輸出:string(31) "dn:cn=root, o=My Company, c=US"
var_dump($retdata);

// 使用 $response_data 參數執行相同的操作
$success = ldap_exop($ds, LDAP_EXOP_WHO_AM_I, NULL, NULL, $retdata, $retoid);
if (
$success) {
var_dump($retdata);
}

ldap_close($ds);
} else {
echo
"無法連線到 LDAP 伺服器";
}
?>

另請參閱

新增註解

使用者貢獻的註解 1 則註解

Roland Gruber
6 年前
以下程式碼可以在 PHP 7.2 中執行 refresh 指令,因為 ldap_exop_refresh 是在 7.3 版才加入的。

$dn= 'cn=user,dc=test,dc=org';
$ttl = 3600;
$data = '';
$data .= '80' . sprintf("%'.02x", strlen($dn)) . bin2hex($dn);
$data .= '81' . sprintf("%'.02x", 4) . sprintf("%'.08x", $ttl);
$data = hex2bin('30' . sprintf("%'.02x", strlen($data)/2) . $data);
$success = ldap_exop($ldapHandle, LDAP_EXOP_REFRESH, $data);
To Top