2017-01-03 1 views
0

je reçois:PHP <5.4 LDAP 1000 lignes limitent

Warning: ldap_search(): Partial search results returned: Sizelimit exceeded 

Lorsque vous essayez d'utiliser ldap_search sur >1000 dossiers.

Solution trouvée pour >5.4, mais impossible à trouver pour < 5.4 Version PHP.

P.S. ne peut pas mettre à jour la version du serveur. Également essayé de fixer la limite:

ldap_set_option($ldap_connect, LDAP_OPT_SIZELIMIT, 100); 

mais il apporte le même avertissement.

+3

Cochez cette case: http://stackoverflow.com/questions/24913366/php-ldap-overcoming-size-limit – Michael

+0

Si ce n'est pas une solution complète, à cause des paramètres du serveur AD, mais en réglant le paramètre $ sizelimit sur 0 et en appliquant des filtres, par exemple par des lettres résout le problème. Par exemple. obtenir tous les enregistrements par "a", "b", "c" à chaque recherche et les mettre à un tableau. – darjus

Répondre

1

Vous semblez avoir de la chance!

Vous pouvez modifier le sizelimit de votre client à une valeur que vous voulez, mais vous ne pouvez pas régler le sizelimit du serveur . Cela n'est possible que pour l'administrateur du serveur LDAP et ils ont généralement une bonne raison de limiter le jeu de résultats renvoyé. Cette limite côté serveur est généralement de 1000 entrées. En définissant ldap_set_option($ldap_connect, LDAP_OPT_SIZELIMIT, 100);, vous pouvez réduire cette limite à 100 entrées renvoyées, mais vous ne pouvez pas l'étendre au-delà de la limite de serveur. La seule façon d'obtenir «plus» de résultats est d'utiliser paged results. Cela signifie que vous interrogez le serveur LDAP plusieurs fois, en obtenant chaque fois le maximum de résultats, mais chaque fois en commençant par la première entrée que vous n'avez pas encore reçue. Dans votre code PHP, vous pouvez ensuite agréger les résultats pour finalement avoir plus de 1000 entrées.

Mais cela n'est disponible que depuis PHP 5.4. Donc, il semble que vous n'avez pas de chance.

A mes yeux, il y a trois solutions:

  1. Patch LDAP-Extension et compilez afin que votre PHP-version peut utiliser les paginée résultats,
  2. Mise à jour à un supported PHP-Version ou
  3. Convainquez votre administrateur LDAP pour augmenter le sizelimit côté serveur.

Comme 3 est généralement très dur et que je prends beaucoup de temps, je vous encourage fortement à considérer l'option 2!

+0

Et 4.use filtres LDAP pour obtenir des enregistrements filtrés, puis les rejoindre à 1 tableau. J'ai utilisé '(& (cn = '*') (samaccountname =. $ FirstLetter." * "))' Dans l'alphabet foreach. Test de cette solution, il semble que cela fonctionne :-) – darjus

+0

Selon le nombre d'utilisateurs qui pourraient ne pas aider.Mais c'est en effet une possibilité lorsque vous n'utilisez pas un filtre différent. Bonne chance! – heiglandreas

1

Solution pour PHP 5.4 est < (testé ant fonctionner):

$alph = array('a', 'b', 'c', 'd', 'e', 
     'f', 'g', 'h', 'i', 'j', 'k', 
     'l', 'm', 'n', 'o', 'p', 'r', 's', 
     't', 'u', 'y', 'v', 'w', 'z'); 

    foreach ($alph as $letter){ 

    $sr = ldap_search($ldap, $dn, '(&(telephoneNumber=*)(sAMAccountName=' . $letter . '*))', array('cn','telephoneNumber','sAMAccountName'), null, 0, 0); 

    $users = ldap_get_entries($ldap, $sr); 
     foreach ($users as $user) { 
     echo $user['sAMAccountName']['0']."<br/>"; 
     } 
    } 

Aussi, vous -FILTRES numéros sur par exemple telephoneNumber, cela dépend de combien d'enregistrements vous avez. Si vous avez beaucoup plus d'enregistrements, vous pouvez essayer d'utiliser plus de boucles de filtrage en commençant par les lettres sAMAccountName=' .$letter.$letter2.'*