ldap_exop

(PHP 7 >= 7.2.0, PHP 8)

ldap_exop执行扩展操作

描述

ldap_exop(
    LDAP\Connection $ldap,
    string $request_oid,
    string $request_data = null,
    array $controls = null,
    string &$response_data = ?,
    string &$response_oid = ?
): mixed

在指定的 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 EXOP
$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 说明

up
-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