Ограничить результаты запроса ldap с помощью zend_ldap - PullRequest
0 голосов
/ 05 января 2012

На самом деле я работаю с 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();

Может быть много результатов, поэтому я хотел бы реализовать разбиение на страницы, ограничивая количество результатов. Я искал в параметрах функции search () Zend_Ldap, у которых есть параметр сортировки, но нечего задать интервал.

Есть ли у вас решение ограничить количество результатов (как, например, в SQL с пределом 0, 200)?

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 января 2012

К сожалению, текущие версии 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 () - это функции, которые вы захотите использовать, если собираетесь использовать патч. Я думаю, что они были переименованы в единственные ldap_control_paged_result () и ldap_control_paged_result_response () в 5.4.

Удачи!

0 голосов
/ 05 января 2012

Запрашиваемое клиентом ограничение размера может использоваться для ограничения количества записей, которые будет возвращать сервер каталогов. Однако запрашиваемое клиентом ограничение размера не может переопределить любое ограничение размера, наложенное сервером. То же самое относится и к сроку. Все поиски должны включать ненулевое ограничение по размеру и времени. Неспособность включить ограничение размера и ограничения по времени является очень плохой формой. См. «LDAP: Практика программирования» и «LDAP: Практика поиска» для получения дополнительной информации.

«Пейджинг» осуществляется с помощью простого расширения для управления результатами поиска. описано в моей записи в блоге: «LDAP: простые постраничные результаты» .

Кроме того, прослушиватель результатов поиска, если ваш API поддерживает его, может использоваться для обработки результатов по мере их поступления, что уменьшит требования к памяти вашего приложения.

...