LDAP est l'acronyme de Lightweight Directory Access Protocol, c'est à dire Protocole Léger d'Accès aux Dossier. C'est un protocole utilisé pour accéder à des " serveurs de dossiers ", des serveurs qui gèrent les informations de manière hierarchique.
Le concept est similaire à la structure de votre disque dur, hormis le fait que la racine s'appelle ici : "The world" (le monde), et que les dossiers du premier niveau sont assimilés à des pays. Les niveaux inférieurs de la structure contiennent des entrées de sociétés, d'organisation ou de lieux tandis que les niveaux encore inférieurs sont des gens, voire des équipement ou des documents.
Pour accéder à un fichier sur votre disque, vous devez utiliser la syntaxe suivante :
/usr/local/mes_app/docs
Le slash indique une division de la référence, et la séquence est lue de gauche à droite.
Une telle référence en LDAP sera exprimée avec une autre syntaxe, la syntaxe à "noms distincts" ("distinguished names"), aussi appelé "nd" ("dn" en anglais). Par exemple :
cn=Jean Dupont,ou=Comptes,o=Ma Société,c=Fr
La virgule marque une division de la référénce, et la séquence est lue de droite à gauche. Vous pouvez la lire comme ceci :
country = Fr
organization = Ma Société
organizationalUnit = Comptes
commonName = Jean Dupont
De la même façon qu'il n'y a pas de règle universelle d'organisation d'un disque dur, un serveur de dossier peut supporter n'importe quelle structure du moment qu'elle a un sens pour ce qu'on en fait. Cependant, il existe quelques conventions : il est impossible d'écrire un code d'accès à un dossier sans en connaître sa structure, de la même façon que vous ne pouvez pas utiliser une base de données sans en connaître les tables.
Recupérer toutes les entrées dont le nom commence par "S" dans un serveur, et afficher le nom et l'adresse email.
Exemple 1. Recherche LDAP <?php // Structure d'une commande simple : // connexion, lien, recherche, interpretation de la recherche // résultat, déconnexion echo "<h3>LDAP query test</h3>"; echo "Connexion ..."; $ds=ldap_connect("localhost"); // Doit être un serveur LDAP valide! echo "Résultat de la connexion : ".$ds."<p>"; if ($ds) { echo "Lien ..."; $r=ldap_bind($ds); // Ceci est un lien "anonymous", typiquement // en lecture seule. En cas d'accès, affiche // " Lien résultat est" echo "Lien résultat est ".$r."<p>"; echo "Recherche de (sn=S*) ..."; // Recherche dans les noms $sr=ldap_search($ds,"o=Ma Société, c=Fr", "sn=S*"); echo "Résultat : ".$sr."<p>"; echo "Nombre d'entrée retournée : ".ldap_count_entries($ds,$sr)."<p>"; echo "Lecture des entrées...<p>"; $info = ldap_get_entries($ds, $sr); echo "Data for ".$info["count"]." items returned:<p>"; for ($i=0; $i<$info["count"]; $i++) { echo "dn vaut : ". $info[$i]["dn"] ."<br>"; echo "première entrée cn vaut : ". $info[$i]["cn"][0] ."<br>"; echo "premièr email vaut: ". $info[$i]["mail"][0] ."<p>"; } echo "Déconnexion "; ldap_close($ds); } else { echo "<h4>Impossible de se connecter à un serveur LDAP </h4>"; } ?> |
Il faut d'abord que les bibliothèques client LDAP soient compilées avec PHP. Vous pouvez vous procurer ces bibliothèques University of Michigan (ldap-3.3 package) ou chez Netscape (Netscape Directory SDK).
Avant d'utiliser les fonctions LDAP il faut savoir :
Une séquence habituelle LDAP suivra le schéma suivant :
ldap_connect() // établi une connexion à un server
|
ldap_bind() // nom de compte "login" ou anonyme
|
éxécution de commande sur le serveur, comme un listage, ou une modification de données avec affichage
|
ldap_close() // "déconnexion"
Vous pouvez en apprendre encore plus, mais en anglais, aux adresses suivantes :
Le SDK Netscape contient un guide du programmeur au format HTML bien pratique.