Manuel PHP

Précédent

 

Suivant

XXV. Fonctions LDAP

Introduction à LDAP

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.

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 a 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")
  • Eventuellemen, un mot de passe pour accéder au serveur (de nombreux serveur fournisse un accès en lien anonymes ("anonymous bind") mais requièrent un mot de passe pour tout le reste).

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"

Plus d'informations

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.

Table des matières
ldap_add _ Ajoute une entrée à un dossier LDAP
ldap_mod_add _ Ajoute une valeur aux attributs courants
ldap_mod_del _ Efface une valeur des attributs courants
ldap_mod_replace _ Remplace une valeur des attributs courants par une autre
ldap_bind _ Se lie à un serveur LDAP
ldap_close _ Déconnecte d'un serveur LDAP
ldap_connect _ Déconnecte à un serveur LDAP
ldap_count_entries _ Compte le nombre d'entrée d'une recherche
ldap_delete _ Efface une entrée dans un dossier
ldap_dn2ufn _ Converti un ND dans un format plus accessible
ldap_explode_dn _ Scinde ND en plusieurs composants
ldap_first_attribute _ Retourne le premier attribut
ldap_first_entry _ Retourne l'identifiant du premier attribut
ldap_free_result _ Libère la mémoire prise par un résultat
ldap_get_attributes _ Retourne les attributs d'une entrée d'un résultat
ldap_get_dn _ Retourne un ND d'une entrée d'un résultat
ldap_get_entries _ Retourne toutes les entrées
ldap_get_values _ Retourne toutes les entrées d'un résultat
ldap_list _ Recherche dans un seul niveau
ldap_modify _ Modifie une entrée LDAP
ldap_next_attribute _ Retourne l'attribut suivant d'un résultat
ldap_next_entry _ Retourne l'entrée suivante d'un résultat
ldap_read _ Lit une entrée
ldap_search _ Recherche dans tout l'arbre LDAP
ldap_unbind _ Termine la liaison avec un serveur LDAP

Précédent

Sommaire

Suivant

ibase_timefmt

Chapitre

ldap_add