PHP使用ldap_search查询父组子组时返回所有用户的优化问题
PHP LDAP搜索子组性能优化方案
你可以从两个维度修改搜索逻辑,既过滤掉不必要的uniqueMembers字段,又提升查询速度:
核心修改点
- 增加返回属性限制:
ldap_search支持第四个参数传入需要返回的属性列表,仅指定你需要的dn、cn即可,服务器不会返回多余的大体积字段,查询耗时会大幅降低。 - 增加对象类型过滤:在搜索过滤器中加入
objectClass的匹配规则,仅返回组类型的条目,避免匹配到非组对象。
修改后代码
// 假设$ldapConn是你已经建立的LDAP连接资源 $baseDn = 'cn=parent-group,cn=groups,dc=company,dc=net'; // 过滤器:同时匹配cn前缀和组对象类型,objectClass可根据你的目录实际类型调整为groupOfNames、group等 $filter = '(&(cn=*)(objectClass=groupOfUniqueNames))'; // 仅指定需要返回的属性,不需要的uniqueMembers等字段不会被返回 $returnAttrs = ['cn', 'dn']; $search = ldap_search($ldapConn, $baseDn, $filter, $returnAttrs); $info = ldap_get_entries($ldapConn, $search); $group_array = []; for ($i=0; $i<$info["count"]; $i++) { $dn = $info[$i]["dn"]; $group_cn = $info[$i]["cn"][0]; array_push($group_array, "$group_cn : $dn"); } // 原代码把foreach放在for循环内会导致重复输出,移到外部即可 foreach($group_array as $group){ echo $group; }
内容的提问来源于stack exchange,提问作者a.smith
相关产品推荐
相关产品推荐

