Manuel PHP
Précédent |  | Suivant

# XLVIII. LDAP

# Introduction à LDAP

LDAP est l'acronyme de Lightweight Directory Access Protocol, c'est à dire Protocole Léger d'Accès aux Dossiers. C'est un protocole utilisé pour accéder à des "serveurs de dossiers", des serveurs qui gèrent les informations de manière hiérarchique.

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'organisations ou de lieux tandis que les niveaux encore inférieurs sont des gens, voire des équipements ou des documents.

Pour accéder à un fichier sur votre disque, vous devez utiliser la syntaxe suivante :

/usr/local/myapp/docs

Le slash indique une division de la référence, et la séquence est lue de gauche à droite.

Avec tous les détails, une référence LDAP s'appelle un "nom distingué" ("distinguished name"), appelé aussi "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.

# Exemple complet

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>";
      }
    ?>

## Utilisation des fonctions PHP LDAP

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 :

- Le nom ou l'adresse du serveur à utiliser

- Le "nd" dans le serveur (la partie du monde qui est sur ce serveur, ce qui peut correspondre à "o=Ma société,c=Fr")

- Eventuellement, un mot de passe pour accéder au serveur (de nombreux serveusr fournissent un accès anonyme ("anonymous bind") mais requièrent un mot de passe pour tous les autres).

Une séquence habituelle LDAP suivra le schéma suivant :

ldap_connect() // établit une connexion à un serveur
|
ldap_bind() // nom de compte "login" ou anonyme
|
éxécution de commandes sur le serveur, comme un listage, ou
une modification de données avec affichage
|
ldap_close() // "déconnexion"

## Plus d'informations

Vous pouvez en apprendre encore plus, mais en anglais, aux adresses suivantes :

- Netscape

- University of Michigan

- OpenLDAP Project

- LDAP World

Le SDK Netscape contient un guide du programmeur au format HTML particulièrement pratique (en anglais).

Précédent | Sommaire | Suivant
java_last_exception_get | Niveau supérieur | ldap_add