使用zend_ldap限制ldap请求的结果

时间:2012-01-05 09:52:00

标签: pagination ldap limit zend-framework

我实际上正在使用Zend Framework,我想从ldap目录获取信息。为此,我使用此代码:

$options = array('host' => '...', 'port' => '...', ...);

$ldap = new Zend_Ldap($options);

$query = '(username=' . $_GET['search'] . ')';

$attributes = array('id', 'username', ...);

$searchResults = $ldap->search($query, $ldap->getBaseDn(), Zend_Ldap::SEARCH_SCOPE_SUB, $attributes);

$ldap->disconnect();

可能有很多结果,所以我想通过限制结果的数量来实现分页。我搜索了Zend_Ldap的search()函数的参数,它有一个排序参数,但没有给出间隔。

您是否有限制结果数量的解决方案(例如在sql中限制为0,200)?

谢谢

2 个答案:

答案 0 :(得分:0)

客户端请求的大小限制可用于限制目录服务器将返回的条目数。但是,客户端请求的大小限制不能覆盖任何服务器强加的大小限制。这同样适用于时间限制。所有搜索都应包含非零大小限制和时间限制。不包括大小限制和时间限制是非常糟糕的形式。有关详细信息,请参阅"LDAP: Programming Practices""LDAP: Search Practices"

“分页”是使用简单的分页结果控制扩展来完成的。在我的博客文章中描述:"LDAP: Simple Paged Results"

或者,如果您的API支持,搜索结果侦听器可用于处理结果,这会降低应用程序的内存需求。

答案 1 :(得分:0)

不幸的是,当前版本的PHP不支持开箱即用的ldap分页功能 - 请参阅http://sgehrig.wordpress.com/2009/11/06/reading-paged-ldap-results-with-php-is-a-show-stopper/

如果您可以控制您的服务器环境,可以使用PHP 5.3.2(可能还有其他)安装补丁,以便您执行此操作:https://bugs.php.net/bug.php?id=42060

....或者您可以等到5.4.0发布用于制作,这应该是在接下来的几周内,其中包括此功能。

ldap_control_paged_results()和ldap_control_paged_results_response()是您在使用补丁时要使用的功能。我认为他们已经在5.4中重命名为单数ldap_control_paged_result()和ldap_control_paged_result_response()。

祝你好运!