You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP8中如何重置LDAP分页?原分页函数已废弃的替代方案

PHP 8+ 中重置LDAP分页至默认值的等价操作

PHP 8.0及以上版本移除了ldap_control_paged_result()和ldap_control_paged_result_response()这两个LDAP分页控制函数,原来通过ldap_control_paged_result($ldap, 0)将分页大小恢复为默认值的操作,现在需要通过LDAP Control参数来实现,具体如下:

核心逻辑

PHP 8+ 中,LDAP分页行为由查询函数(如ldap_search()、ldap_list())的controls参数控制。要恢复默认分页(使用服务器默认的分页设置,关闭手动分页控制),有两种可行方式:

方式1:后续查询不传递controls参数

如果之前的查询使用了分页控制,后续在同一个LDAP连接中执行查询时,不指定controls参数,就会自动回到服务器默认的分页状态,无需额外代码。

方式2:明确传递重置后的分页控制或空控制数组

如果需要主动重置分页状态(比如在同一连接中切换分页模式),可以创建一个size设为0的Paged Results Control,或者直接传递空数组:

代码示例1:创建重置分页的Control对象

// 创建Paged Results Control,size设为0以重置分页
$resetControl = ldap_control_create(
    '1.2.840.113556.1.4.319', // 分页控制的标准OID
    true,
    ['size' => 0, 'cookie' => '']
);

// 在查询时传递该控制
$searchResult = ldap_search(
    $ldapConn,          // LDAP连接资源
    'dc=example,dc=com',// 基准DN
    '(objectClass=*)',  // 查询过滤器
    ['cn', 'mail'],     // 返回属性
    0,                  // 不区分大小写
    0,                  // 不限制返回条目数(由服务器默认控制)
    0,                  // 超时时间
    LDAP_SCOPE_SUBTREE, // 查询范围
    [$resetControl]     // 传递重置后的控制
);

代码示例2:传递空控制数组

更简洁的方式是直接传递空的controls数组,同样会让查询使用服务器默认分页设置:

$searchResult = ldap_search(
    $ldapConn,
    'dc=example,dc=com',
    '(objectClass=*)',
    ['cn', 'mail'],
    0,
    0,
    0,
    LDAP_SCOPE_SUBTREE,
    [] // 空控制数组,恢复默认分页
);

注意事项

  • ldap_result()确实不支持传递Control对象,所有分页控制操作都必须在发起查询的函数(如ldap_search、ldap_list)中通过controls参数完成,无法在获取结果阶段修改分页设置。

内容的提问来源于stack exchange,提问作者Gergely Lukacsy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 02:20:18