« Back
in PHP LDAP read.

LDAP et PHP.

Effectuer une recherche dans LDAP.

<?php 

  // LDAP variables
  $ldaphost = "10.50.1.21";  // your ldap servers
  $ldapport = 389;           // your ldap server's port number

  // using ldap bind
  $ldaprdn  = 'cn=Directory Manager';     // ldap rdn or dn
  $ldappass = 'ipsweb06';  // associated password

  // Connecting to LDAP
  $ldapconn = ldap_connect($ldaphost, $ldapport)
            or die("Could not connect to $ldaphost");

  if ($ldapconn) {
      // binding to ldap server
      $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

      // verify binding
      if ($ldapbind) {
          echo "LDAP bind successful...";
          $dn = "ou=People, dc=transpac";

          $filter="sn=a*";

          $sr = ldap_search($ldapconn, $dn, $filter);

          $info = ldap_get_entries($ldapconn, $sr);
          echo $info["count"]." entries returned\n";

      } else {
          echo "LDAP bind failed...";
      }
  }else{
    echo "LDAP server not available ...";
  }
?>

Pour cela on utilise ldap_search($ldapconn, $dn, $filter);

  • $ldapconn : est la connection à ldap
  • $dn : l'endroit ou l'on recherche
  • $filter : la recherche en elle même

Pour l'attribut $dn :
Le DN représente le nom de l'entrée sous la forme du chemin d'accès à celle-ci depuis le sommet de l'arbre. On peut comparer le DN au path d'un fichier Unix.
Exemple :
People
transpac PM FT OBS People
Oleane

ou=People,dc=OBS,dc=FT,dc=PM,dc=transpac

Permet d’accéder au "dossier" People de OBS. comme si on avait /transpac/PM/FT/OBS/People
Il dépendra donc de l’arborescence du LDAP.

Pour l'attribut $filter :
Le filtre de recherche s'exprime suivant une syntaxe spécifique dont la forme générale est :
(< operator(< search operation)(< search operation)...))

Ce filtre décrit une ou plusieurs conditions exprimées sous forme d'expressions régulières sensées désigner un ou plusieurs objets de l'annuaire, sur lesquels on veut appliquer l'opération voulue. Le tableau 6 récapitule les opérateurs de recherche disponibles :
Filtre Syntaxe Interprétation
Approximation (sn~=Mirtain) nom dont l'orthographe est voisine de Mirtain
Egalité (sn=Mirtain) vaut exactement Mirtain
Comparaison (sn>Mirtain) , <= , >= , < noms situés alphabétiquement après Mirtain
Présence (sn=) toutes les entrées ayant un attribut sn
Sous-chaîne (sn=Mir
), (sn=irtai), (sn=Mirti) expressions régulières sur les chaînes
ET (&(sn=Mirtain) (ou=Semir)) toutes les entrées dont le nom est Mirtain et du service Semir
OU (|(ou=Direction) (ou=Semir)) toutes les entrées dont le service est le Semir ou la Direction
Négation (!(tel=*)) toutes les entrées sans attribut téléphone

Pour plus d'informations

Exploiter le résultat :
De nombreuses fonctions LDAP permettent d'exploiter les résultats renvoyés par la fonction ldap_search(). Ces fonctions ont un nom commençant généralement par ldap_get_suivi du nom de l'élément à récupérer :

ldap_get_dn() permet de récupérer le DN de l'entrée
ldap_get_entries() permet de récupérer l'ensemble des entrées
ldap_get_option() permet de récupérer la valeur d'une option
ldap_get_values() permet de récupérer toutes les valeurs d'une  entrée
ldap_get_values_len() permet de récupérer les valeurs binaires d'une entrée
ldap_count_entries() permet de récupérer le nombre d'entrées retournées par la fonction de recherche

Exemple complet :

<?php 

  // LDAP variables
  $ldaphost = "10.50.1.21";  // your ldap servers
  $ldapport = 389;           // your ldap server's port number

  // using ldap bind
  $ldaprdn  = 'cn=Directory Manager';     // ldap rdn or dn
  $ldappass = 'ipsweb06';  // associated password

  // Connecting to LDAP
  $ldapconn = ldap_connect($ldaphost, $ldapport)
            or die("Could not connect to $ldaphost");

  if ($ldapconn) {
      // binding to ldap server
      $ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);

      // verify binding
      if ($ldapbind) {
          echo "LDAP bind successful...";

          // OU Organizational Unit
          // DC Organization
          $dn = "ou=People, dc=transpac";


          $filter="sn=a*";
          //$justthese = array("ou", "sn", "givenname", "mail");

          //$sr = ldap_search($ldapconn, $dn, $filter, $justthese);
          $sr = ldap_search($ldapconn, $dn, $filter);

          $info = ldap_get_entries($ldapconn, $sr);
          echo $info["count"]." entries returned\n";

          echo  "<br />Récupération des entrées ...";
          $info = ldap_get_entries($ldapconn, $sr);

           echo  "Affichage des données des ".$info["count"]. " entrées trouvées :";

         for ($i=0; $i<$info["count"]; $i++){
           echo  "<p align='justify'>";
           echo  "Le dn (Distinguished Name) est: ". $info[$i]["dn"] ."<br>";
           echo  "Nom (sn) : ". $info[$i]["sn"][0] . "<br>";
           echo  "Prénom (cn) : ". $info[$i]["cn"][0] . "<br>";
         }

      } else {
          echo "LDAP bind failed...";
      }
  }else{
    echo "LDAP server not available ...";
  }
?>
comments powered by Disqus