IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[LDAP] Problème de recherche


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut [LDAP] Problème de recherche
    Bonjour,

    J'essaye actuellement de récupérer l'intégralité de mes utilisateurs AD afin de les intégrer dans ma base de données mais je rencontre un problème de "Sizelimit exceeded".
    J'ai essayé de contourner ce problème en ajoutant un ldap_set_option avec un LDAP_OPT_SIZELIMIT et en faisant un range(a,z) mais j'ai toujours des erreurs ...

    Explication :
    - Lorsque je ne mets pas de LDAP_OPT_SIZELIMIT, il me ressort une erreur : "Warning: ldap_search(): Search: Operations error".
    - Lorsque je mets un LDAP_OPT_SIZELIMIT à 40 par exemple, j'ai des résultats mais pas pour toutes les lettres .
    Pour les lettres avec résultat, il me retourne les 40 premiers de cette lettre mais avec toujours une erreur : "Sizelimit exceeded".
    Pour toutes les autres lettres, il me retourne un "Operations error".

    Je n'arrive pas à comprendre ce que je dois faire exactement.
    Pourriez-vous m'aider à récupérer tous mes utilisateurs svp ?


    Voici mon code afin de vous aider à mieux comprendre ma démarche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    function ListeLdap($j, $LetterFiltre)
    {   
        $Conf_LDAP_Server    = "serveur.domain.fr";
        $Conf_Def_Dom        = 'domain.fr';
        $search              = "DC=domaindc,DC=domaindc";
     
        $ds = @ldap_connect($Conf_LDAP_Server);
        if ($ds)
        {
            ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
            ldap_set_option($ds, LDAP_OPT_SIZELIMIT, 40);
     
            $r = ldap_bind($ds, 'administrateur'.'@'.$Conf_Def_Dom, 'mdp');     
    		$FiltreSearch   = "(&(objectClass=user)(objectCategory=person)(cn=".$LetterFiltre."*))";
    		$sr=ldap_search($ds, $search, $FiltreSearch);
    		$infoLDAP = ldap_get_entries($ds, $sr);
    		ldap_close($ds);
    		$info = array(); $nom = array();
    		for($i=0; $i<count($infoLDAP); $i++){
    			if( !empty($infoLDAP[$i]['cn'][0])){
    				$info[$j]['nom']    = $nom[] = utf8_encode($infoLDAP[$i]['cn'][0]);
    				$j++;
    			}
    		}
            print_r($info);
     
        } else {
    		echo "Erreur connexion";
    	}
    	return $j;
    }
     
    $j=0;
    foreach (range('a', 'z') as $LetterFiltre) {
    	$j = ListeLdap($j, $LetterFiltre);
    }
    Merci beaucoup pour l'aide que vous m'apporterez.

    --
    Sweet.

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    edit final : voici un code qui fonctionne sur un énorme ldap (je viens de tester).
    Bien sûr, je teste sur y et z, c'est plus rapide...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    function listeLdap($letter){ 
    	$nom="serveur.domain.fr";
    	$dn= "DC=domaindc,DC=domaindc"; 
    	$filter='cn='.$letter.'*';
    	$ldapConnex = ldap_connect($nom) or die("Impossible de se connecter au serveur LDAP.");
    	$recup=array('cn');
    	$ldap_search= ldap_search($ldapConnex,$dn,$filter,$recup);
    	$entries= ldap_get_entries($ldapConnex,$ldap_search);
     
    	if(sizeof($entries)>0){
    		$info = array();$j=0;
     
    		for($i=0; $i<count($entries); $i++){
    			if( !empty($entries[$i]['cn'][0])){
    				$info["$letter"][$j]['nom'] = utf8_encode($entries[$i]['cn'][0]);
    				$j++;
    			}
    		}
    	}
    	else{
    		$info='X';
    	}
     
    	ldap_close($ldapConnex);
    	return $info;
    }
    $infos=array();
    foreach (range('y', 'z') as $letter) {
    	$tab=listeLdap($letter);
    	if($tab!='X'){
    		$infos=array_merge($infos,$tab);
    	}
    }
    echo '<pre>';
    print_r($infos);
    echo '</pre>';
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour Dendrite,

    Merci pour tes réponses.

    Pour répondre à ta question de la connexion à chaque requête, ma réponse est qu'à force de tester j'ai bougé pas mal de choses et c'est resté ainsi.
    Ensuite, pour le $j, ça marchait mais ce n'est pas le plus optimisé, j'en doute pas.

    Concernant ton code, voici le retour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ( ! ) Warning: ldap_search(): Search: Operations error in D:\Dev\wamp\www\intra\module\Admin\accueil_webmester.php on line 52
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0010	159152	{main}( )	..\index.php:0
    2	0.1000	233696	include_once( 'D:\Dev\wamp\www\intra\module\Admin\accueil_webmester.php' )	..\index.php:200
    3	0.1000	234224	listeLdap( )	..\accueil_webmester.php:74
    4	0.1000	234808	ldap_search ( )	..\accueil_webmester.php:52
     
    ( ! ) Warning: ldap_get_entries() expects parameter 2 to be resource, boolean given in D:\Dev\wamp\www\intra\module\Admin\accueil_webmester.php on line 53
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0010	159152	{main}( )	..\index.php:0
    2	0.1000	233696	include_once( 'D:\Dev\wamp\www\intra\module\Admin\accueil_webmester.php' )	..\index.php:200
    3	0.1000	234224	listeLdap( )	..\accueil_webmester.php:74
    4	0.1040	235480	ldap_get_entries ( )	..\accueil_webmester.php:53
    Aurais-tu une idée de ce qui pourrait bloquer ?

    Merci pour ton aide en tout cas.

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Tu faisais un bind pour te connecter à ton ldap. Moi, je me connecte en anonyme. ça doit être ça la différence;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $r = ldap_bind($ds, 'administrateur'.'@'.$Conf_Def_Dom, 'mdp');
    J'ai enfin compris ce que fait ton $j... C'était malin comme truc.

    Bref, pour rester le plus près possible de ton code de départ, tu peux tester juste ça maitenant (simple ajout de test quand la lettre ne retourne aucun enregistrement et suppression du sizelimit) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    function ListeLdap($j, $LetterFiltre)
    {   
        $Conf_LDAP_Server    = "serveur.domain.fr";
        $Conf_Def_Dom        = 'domain.fr';
        $search              = "DC=domaindc,DC=domaindc";
     
        $ds = @ldap_connect($Conf_LDAP_Server);
        if ($ds)
        {
            ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
           // ldap_set_option($ds, LDAP_OPT_SIZELIMIT, 40);
     
            $r = ldap_bind($ds, 'administrateur'.'@'.$Conf_Def_Dom, 'mdp');     
    		$FiltreSearch   = "(&(objectClass=user)(objectCategory=person)(cn=".$LetterFiltre."*))";
    		$sr=ldap_search($ds, $search, $FiltreSearch);
    		$infoLDAP = ldap_get_entries($ds, $sr);
    		ldap_close($ds);
    		if(sizeof($infoLDAP)>0){
    			$info = array(); 
    			for($i=0; $i<count($infoLDAP); $i++){
    				if( !empty($infoLDAP[$i]['cn'][0])){
    					$info[$j]['nom']= utf8_encode($infoLDAP[$i]['cn'][0]);
    					$j++;
    				}
    			}
    			echo '<pre>';
    			print_r($info);
    			echo '</pre>';
    		}
     
        } else {
    		echo "Erreur connexion";
    	}
    	return $j;
    }
     
    $j=0;
    foreach (range('y', 'z') as $LetterFiltre) {
    	$j = ListeLdap($j, $LetterFiltre);
    }
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    En remettant le bind ou en utilisant le dernier morceau de code que tu as mis, j'ai toujours les mêmes erreurs
    Je ne comprends pas ...

    J'ai tout mis dans un nouveau fichier tout simple car avant c'était intégré dans une page de mon Intranet et pareil.

    Si tu as un autre morceau de code, sans te baser sur le mien et qui permet de lister mes utilisateurs, je suis preneur.

    Merci pour ton aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ( ! ) Warning: ldap_search(): Search: Operations error in D:\Dev\wamp\www\test.php on line 16
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0010	147304	{main}( )	..\test.php:0
    2	0.0010	148040	ListeLdap( )	..\test.php:40
    3	0.1280	148792	ldap_search ( )	..\test.php:16
     
    ( ! ) Warning: ldap_get_entries() expects parameter 2 to be resource, boolean given in D:\Dev\wamp\www\test.php on line 17
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0010	147304	{main}( )	..\test.php:0
    2	0.0010	148040	ListeLdap( )	..\test.php:40
    3	0.1310	149592	ldap_get_entries ( )	..\test.php:17

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Trouvé ça dans la doc, qui dit en substance qu'il faut aller voir ce que la configuration de ton serveur donne comme valeur, car c'est la moins forte des deux qui bloquera la première.
    LDAP_OPT_SIZELIMIT

    Specifies the maximum number of entries that can be returned on a search operation. Note: the actual size limit for operations is also bounded by the maximum number of entries that the server is configured to return. Thus, the actual size limit will be the lesser of the value specified on this option and the value configured in the LDAP server. The default sizelimit is unlimited, specified with a value of zero (thus deferring to the sizelimit setting of the LDAP server).

    Examples:

    sizevalue=50;
    ldap_set_option( ld, LDAP_OPT_SIZELIMIT, &sizevalue);
    ldap_get_option( ld, LDAP_OPT_SIZELIMIT, &sizevalue);


    LDAP_OPT_TIMELIMIT

    Specifies the number of seconds to wait for search results. Note: the actual time limit for operations is also bounded by the maximum time that the server is configured to allow. Thus, the actual time limit will be the lesser of the value specified on this option and the value configured in the LDAP server. The default is unlimited (specified with a value of zero).

    Examples:

    timevalue=50;
    ldap_set_option( ld, LDAP_OPT_TIMELIMIT, &timevalue);
    ldap_get_option( ld, LDAP_OPT_TIMELIMIT, &timevalue);
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Lorsque je fais le ldap_get_option, voici ce que le serveur me retourne :
    LDAP_OPT_SIZELIMIT : 0
    LDAP_OPT_TIMELIMIT : 0

    Pour être sûr que je récupère bien les infos, j'ai fait la même chose sur LDAP_OPT_PROTOCOL_VERSION, avant et après la modification :
    Avant : LDAP_OPT_PROTOCOL_VERSION : 2
    Après : LDAP_OPT_PROTOCOL_VERSION : 3

    J'ai donc bien les valeurs à 0 ce qui signifie normalement que c'est illimité ...

  8. #8
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Note: the actual size limit for operations is also bounded by the maximum number of entries that the server is configured to return.
    Oui, mais c'est cette donnée là qu'il faut que tu récupères.
    Je traduis
    "Note : la véritable limite de taille pour les opérations est AUSSI bornée par le nb maximum d'entrées pour lesquelles le serveur est configuré. "

    En clair, ta modif dans le code peut la baisser artificiellement cette limite, mais si elle est déjà basse, tu dois l'augmenter direct dans la config serveur.

    Là, si je ne m'abuse, ton 0 signifie juste que tu n'as pas ajouté de frein au frein "physique" de la config serveur.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Tiens, tu peux faire un test avec
    LDAP_OPT_SIZELIMIT à 1 ?
    en principe, ta config serveur va supporter le poids.
    Juste pour voir si les messages d'erreur viennent de là.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Même résultat apparemment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    AVANT LDAP_OPT_SIZELIMIT : 0 
    AVANT LDAP_OPT_TIMELIMIT : 0 
    AVANT LDAP_OPT_PROTOCOL_VERSION : 2 
    APRES LDAP_OPT_SIZELIMIT : 1 
    APRES LDAP_OPT_PROTOCOL_VERSION : 3 
     
    ( ! ) Warning: ldap_search(): Search: Operations error in D:\Dev\wamp\www\test.php on line 28
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0010	150424	{main}( )	..\test.php:0
    2	0.0010	151160	ListeLdap( )	..\test.php:52
    3	0.0030	152032	ldap_search ( )	..\test.php:28
     
    ( ! ) Warning: ldap_get_entries() expects parameter 2 to be resource, boolean given in D:\Dev\wamp\www\test.php on line 29
    Call Stack
    #	Time	Memory	Function	Location
    1	0.0010	150424	{main}( )	..\test.php:0
    2	0.0010	151160	ListeLdap( )	..\test.php:52
    3	0.0070	153032	ldap_get_entries ( )	..\test.php:29

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2004
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2004
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Quelqu'un aurait il d'autres idées svp ?

    Bonne journée.

Discussions similaires

  1. [OpenLDAP] problème de recherche en LDAP
    Par tulipebleu dans le forum Applications et environnements graphiques
    Réponses: 0
    Dernier message: 29/04/2009, 11h03
  2. [LDAP] problème de recherche
    Par dj-julio dans le forum Bibliothèques et frameworks
    Réponses: 16
    Dernier message: 12/03/2008, 10h51
  3. problème de recherche dans une base de données
    Par bouzid_mehdi dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 06h47
  4. Problème de recherche dans une BD
    Par ledevelopeur dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/04/2004, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo