Passer au contenu

Interfacez un annuaire LDAP avec PHP

PHP possède une librairie de fonctions LDAP (Lightweight Directory Access Protocol) qui simplifie le travail d’interfaçage avec les annuaires. Il devient alors facile d’ouvrir son annuaire aux employés via un intranet, mais aussi aux clients et partenaires sur un site web.

Protocole d’annuaire le plus utilisé aujourd’hui, LDAP simplifie la gestion des droits d’accès et répertorie aussi bien les utilisateurs que les imprimantes ou les ordinateurs. Devant cet indéniable succès, de plus en plus d’entreprises souhaitent ouvrir cet annuaire à leurs employés, afin qu’ils puissent retrouver aisément des collègues. L’annuaire est alors accessible depuis l’intranet de la société.En PHP, l’interfaçage de cet annuaire LDAP se révèle très simple. Avant de commencer vos développements, vérifiez que le module LDAP a été chargé par PHP lors de son lancement. Pour cela, ouvrez le fichier “php.ini” situé dans le répertoire “c:php”, ou “c:easyphpphp” si vous avez installé la distribution EasyPHP. Recherchez la ligne “;extension=php_ldap.dll” et ôtez le point virgule. Arrêtez votre serveur Apache, puis relancez-le, afin qu’il prenne en compte la modification de ce paramètre.

1 – Indiquez l’annuaire à interfacer

Tous les salariés de votre entreprise ne sont pas forcément répertoriés dans un seul annuaire. Il peut en exister un par pays ou par filiale, par exemple. D’autre part, vous voudrez certainement étendre les fonctions de votre outil de recherche au monde de l’internet, et non vous limiter à votre intranet. Il suffit pour cela de lister l’ensemble des annuaires susceptibles d’être interrogés dans un tableau. L’utilisateur aura alors la possibilité de choisir l’annuaire à consulter. Stockez ce tableau dans un fichier intitulé “ini.inc”, que vous appellerez dans l’ensemble des pages de cette mise en ?”uvre. Cela vous aide à factoriser le code, tout en simplifiant la maintenance de l’application.

2 – Récupérez la recherche de l’utilisateur

La première étape de la recherche consiste, pour l’utilisateur, à spécifier un annuaire ainsi que le nom ou le prénom de la personne qu’il recherche. Construisez la liste des annuaires disponibles à l’aide d’une boucle “for”, dont la longueur sera égale au nombre d’entrées du tableau. L’instruction “count($server)” vous sert à obtenir ce chiffre. Le reste du formulaire ne pose pas de difficulté.

3 – Connectez-vous à l’annuaire

Par défaut, PHP propose un jeu de fonctions qui simplifie grandement le dialogue avec un annuaire LDAP. Toutes les commandes imaginables sont disponibles, de la gestion de la connexion à la navigation dans l’arbre en passant par l’ajout, la sélection ou la suppression d’une entrée. Retrouvez la liste complète des fonctions LDAP à l’adresse php.net/manual/fr/ref.ldap.php.La connexion à l’annuaire s’effectue à l’aide de la fonction “ldap_connect()”. Un seul argument est attendu : le nom de domaine ou l’adresse IP de l’annuaire. Dans cette mise en ?”uvre, indiquez l’annuaire sélectionné par l’utilisateur dans le formulaire de recherche avec la variable “$nserv”. Elle désigne la ligne du tableau d’annuaire à prendre en compte. Une fois la connexion établie, authentifiez-vous auprès de l’annuaire. Dans cet exemple, on utilise une connexion anonyme sur un annuaire publique. Mais il s’avère quand même nécessaire de se déclarer à l’aide de l’instruction “ldap_bind()”. Il ne vous reste plus qu’à tester la connexion. Si elle est effective, la recherche peut continuer. Dans le cas contraire, le programme affiche le message “La connexion au serveur $server[$nserv] a échoué”.

4 – Interrogez l’annuaire

La structure d’un annuaire LDAP s’apparente davantage à celle d’un document XML qu’à celle d’une base de données relationnelle. Il s’agit en fait d’un graphe objet. Vous pouvez donc adresser directement un n?”ud précis de l’arbre si vous en connaissez les paramètres. Ici, vous allez réaliser une recherche simple sur l’ensemble de la structure. La requête s’effectue à l’aide de la fonction “ldap_search()”, laquelle possède 4 attributs. Le premier correspond à la connexion à utiliser et le deuxième au n?”ud de départ. Ce dernier est ici égal à la racine de l’arbre.Les deux autres paramètres servent respectivement à préciser un filtre et la liste des données que la recherche doit renvoyer. Définissez le filtre à l’aide de la variable “$query”, puis attribuez-lui la valeur “(|(cn=$nom*) (givenname=$nom*))”. Cette chaîne signifie que seules seront sélectionnées les feuilles “common name (cn)” et “givenname” égales à “$nom”. Comme vous ne souhaitez retrouver que le nom, l’adresse e-mail et le pays de la personne, il est inutile de transporter toutes les données. Le paramètre “$attributs” sert à préciser, dans un tableau, les informations à retourner.

5 – Stockez le résultat dans un tableau

Une fois l’interrogation de l’annuaire achevée, vous devez conserver le résultat dans une variable de façon à gérer plus facilement la manipulation et l’affichage des informations. La fonction “ldap_get_entries()” déclenche réellement la recherche et indique à l’annuaire la variable où stocker le résultat. Profitez-en également pour compter le nombre d’entrées retournées. Cela vous servira plus tard pour afficher ce chiffre à titre d’information pour l’utilisateur, mais aussi pour certaines boucles de type “for”.

6 – Construisez le code HTML

À ce stade, il est déjà possible d’indiquer à l’utilisateur l’état de la connexion au serveur (connecté ou déconnecté), ainsi que le nombre d’enregistrements retrouvés. Pour simplifier la gestion de l’affichage, vous pouvez stocker la sortie écran dans une variable qui sera affichée une fois pour toutes. Il s’agit simplement d’y ajouter au fur et à mesure les informations qui parviennent de l’annuaire. Utilisez pour cela le caractère “.” devant le caractère “=”. Le point précise que l’on insère des informations dans la variable. Ainsi, après avoir indiqué l’état de la connexion, ajoutez le nombre d’enregistrements et la première ligne du tableau de résultat.Reclassez ensuite le tableau de résultat dans l’ordre alphabétique croissant à l’aide de la fonction “sort()” et de son paramètre “sort_string”. Affichez alors chaque enregistrement en utilisant une boucle “for” initialisée à “0” et terminée par la valeur “$cpt” (résultat de la commande “ldap_count_entries()”). Vous pouvez remettre en forme chaque donnée à l’aide des fonctions “strtolower()” et “ucwords()”. La première met en minuscule chaque caractère de la chaîne manipulée, tandis que la seconde ajoute une majuscule à chaque mot. N’hésitez pas à conserver chaque donnée dans une colonne d’un tableau, mais aussi à insérer des liens de façon à améliorer la mise en page et l’ergonomie.

7 – Fermez la connexion et affichez le résultat

À présent, fermez la connexion à l’annuaire via la fonction “ldap_close”, puis affichez le résultat à l’aide d’une simple instruction “echo”.

🔴 Pour ne manquer aucune actualité de 01net, suivez-nous sur Google Actualités et WhatsApp.


Frédéric Bordage