LDAPベースのすべてのエントリを反復処理する必要があります。実際、LDAPサーバーは検索ごとに500エントリに制限されています。私はPHP 5.6で作業しています。PHPを使用してページベースのLDAPベースを検索する
(...)
498 - NAME SUPRESSED
499 - NAME SUPRESSED
500 - NAME SUPRESSED
WARNING: ldap_control_paged_result_response(): Result is: Size limit exceeded (4)
WARNING: ldap_control_paged_result_response(): Result is: Size limit exceeded (4)
WARNING: ldap_control_paged_result_response(): Result is: Size limit exceeded (4)
(...)
:
(...)
ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
$pageSize = 100;
$cookie = '';
$count = 0;
do {
ldap_control_paged_result($conn, $pageSize, true, $cookie);
$result = ldap_search($conn, 'ou=people,dc=ufsf,dc=br', 'uid=*', ['uid', 'name']);
$entries = ldap_get_entries($conn, $result);
foreach ($entries as $entry) {
$count++;
echo $count . ' - ' . $entry['name'][0] . PHP_EOL;
}
ldap_control_paged_result_response($conn, $result, $cookie);
} while($cookie !== null && $cookie != '');
しかし、私はまだ500個の以上のエントリを取得することはできませんが、これが出力されます。
は私が ldap_control_paged_resultと ldap_control_paged_result_responseだけ実装1、簡単なテストスクリプトを使用して可能な解決策を見つけました何か不足していますか?
[PHPでLDAPのすべてのユーザーを列挙する](http://stackoverflow.com/questions/1473075/enumerate-all-users-in-ldap-with-php) – rkosegi
これは 'ldap_set_option($ conn 、LDAP_OPT_PROTOCOL_VERSION、3); '本当に検索の直前に呼び出されますか?その場合は、 'ldap_connect()'の後で 'ldap_bind()'の前に呼び出す必要があります。これはページングがLDAP v3の機能であり、正しいバージョンでプロトコルバージョンを設定していないと効果がない可能性があるため、説明できるかもしれません。 – ChadSikorra
@rkosegiこれは、IMOをはるかに簡単にすることができる、非常に完全で何とか複雑な解決策でした。最後に、サーバーの限界を広げる問題が解決されました。最高の解決策ではありませんが、今のところ働いています。 – marcellorvalle