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
相关产品推荐
相关产品推荐

