您需要执行分页搜索操作以返回超过每个查询的默认 1000 限制的数据。分页搜索的工作原理是每次查询仍然可以获取 1000 个项目,但服务器会记住您的搜索停止的位置,向您发送一个cookie,您可以稍后将此 cookie 用于后续搜索请求。然后服务器将返回另外 1000 个项目,依此类推,直到服务器返回空 cookie -> 结果集完成。
这通常需要一些代码才能使所有事情都正确。我建议如果您打算使用 ldap 做更多事情,请查看一些完善的 php 库,例如adLDAP或AD-X。
至于搜索查询本身,我建议采用以下方式:
- 您对所有填写了该属性的用户执行搜索
l
: (&(objectcategory=person)(l=*)) (这还将包括联系人对象 - 如果您不想要这个,请将第一部分替换为objectclass=user
)
- 您获取
l
属性的值并对集合进行唯一化,可能使用array_unique
函数。
如果您决定使用 AD-X,那么这个任务就很简单了。
$link = new ADX\Core\Link( 'domain.com' ); // open connection
$link->bind ('username', 'pass'); // Authenticate
// The Task is a configuration object for your search
// request - let's configure it
$task = new ADX\Core\Task( ADX\Enums\Operation::OpSearch, $link );
$task->attributes( 'l' ); // Get these attributes
$task->filter( '(&(objectcategory=person)(l=*))' ); // use this search filter
// Do the search using paged searching, returning
// ALL matching objects
$result = $task->run_paged();
print_r( $result->unique( 'l' ); // Get all unique 'l' values from the set
如果您不想使用库,那么您绝对应该看看构成分页结果搜索功能的这两个函数:
我希望这有帮助!祝你好运!