Bonjour,
Etant en train de créer des contôles afin d'automatiser des créations sur un annuaire Ldap, je suis en train de créer des fonctions.
Actuellement sur une fonction devant checker l'existence d'une entrée dans un des groupOfNames et j'ai un "pseudo"-problème.
J'explique :
Dans l'annuaire il y a une branche pour les groupes : ou=groups,dc=example,dc=com.
Chaque groupe est un object class du type groupOfNames.
Ils sont définis de la manière suivante :
cn=toto,ou=groups,dc=example,dc=com
J'ai donc crée une méthode afin de vérifier, lorsque je souhaite créer une nouvelle entrée pour un nouveau groupe, qu'un groupe existant n'est pas déjà nommé pareil.
J'ai donc crée une classe de connection ldap (la partie connexion fonctionne).
Et j'ai crée la méthode suivante :
$this->LdapConn renvoie au résultat de la fonction Ldap_Bind()$this->BaseDN renvoie à la base de recherche (dc=example,dc=com)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function Existence($entree, $attribut, $valeur){ $result = ldap_compare($this->ldapConn, "$entree,$this->baseDN", $attribut, $valeur); if ($result === true) { return true; } elseif ($result === false) { return false; }}
La méthode est appelée ainsi :
La méthode fonctionne car j'ai le bon message qui apparait selon que l'entrée est déjà existante ou non.
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 $ldap = new Ldap("ldap://xxxx.xxxx.xxxx.xxxx", 389, "dc=example,dc=com"); $ldap->ldapConn(); $bind = $ldap->ldapBind("username", "secret"); if(is_bool($bind) === true) $valeur = "appli"; $entree = "cn=".$valeur.",ou=groups"; $attribut = "cn"; $check = $ldap->Existence($entree, $attribut, $valeur); if(is_bool($check)=== true)echo "application existe"; else echo "Application nouvelle";
Seulement, dans le cas ou l'entrée n'existe pas j'ai un Warning qui s'affiche :
J'estime que cette erreur est "normale" car c'est justement cela que je souhaite tester : le fait que l'objet soit inexistant.Warning: ldap_compare() [function.ldap-compare]: Compare: No such object in C:\wamp\www\portail-secta\src\DAO\ldap.class.php on line 63
Je voulais donc savoir si il y avait moyen, pour la méthode $ldap->Existence et uniquement pour elle, de choper cette erreur et d'en faire autre chose.
j'ai fait des recherche et j'ai vu que "No such Object" était liée à l'erreur ldap numérotée 0x20, est-ce correct ?
j'ai aussi vu la possibilité de choper l'erreur vial ldap_errno.
D'instinct, je pense qu'il faudrait utiliser quelque-chose que je commence à apprendre mais que je suis loin de maitriser qui sont les blocs try catch .. est-ce que cela pourrait faire en sorte de mettre un traitement alternatif de l'erreur qui me permettrait de retourner un false au lieu d'un warning..
Comment dois-je le placer ? (autour de la commande ldap_compare uniquement ? ou sur toute la méthode ? dans l'appel de la méthode).
En fait je veux surtout éviter de faire un masquage systématique des erreurs, je ne suis pas à l'aise avec cette pratique.
Et j'aurais aimé savoir : L'utilisation de la fonction Ldap_compare est-elle la plus judicieuse pour ce que je veux faire ?
Merci d'avance.
Partager