6.Le langage PHP
6.16.LDAP
6.16.3.Accès via les fonctions de l'extension ldap
6.16.3.4.L'accès en écriture
6.16.3.4.1.Introduction
Un annuaire LDAP permet d'apporter des modifications (si tant est que vous y êtes autorisé) par ajout, modification, renommage/déplacement et suppression d'objets.
6.16.3.4.2.L'ajout d'un objet
L'extension PHP ldap permet également d'ajouter des données dans l'annuaire LDAP, pour cela, il faudra, une fois connecté
[comment?], faire appel à la méthode
ldap_add().
Cette fonction attend 3 paramètres:
- La ressource LDAP (retournée par ldap_connect())
- Une chaîne de caractères précisant le DN de l'objet à ajouter (ex: cn=Heute Damien,ou=redacteurs,dc=phpfacile,dc=com)
- Un tableau contenant les attributs de l'objet (y compris le ou les attributs objectClass). Les clés préciseront le nom de l'attribut (peu importe la casse: majuscules, minuscules, mélanges) et les valeurs associées peuvent être:
- soit des chaînes de caractères
- soit des tableaux indexés contenant des chaînes de caractères (dans le cas d'attributs multivalués)
|
|
<?php
// Extrait de code (on suppose l'authentification préalablement établie)
// $ldap est la valeur retour de ldap_connect()
$objet = [
'sn' => 'DUPOND',
'telephoneNumber' => '+33 0 00 00 00 00',
'description' => ['Compte de J. DUPOND', 'Créé pour démonstration'],
'objectClass' => 'person'
];
$requete = ldap_add($ldap,
'cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
$objet);
if (false === $requete) die('L\'ajout a échoué');
?>
<?php
// Extrait de code (on suppose l'authentification préalablement établie)
// $ldap est la valeur retour de ldap_connect()
$objet = array(
'sn' => 'DUPOND',
'telephoneNumber' => '00.00.00.00.00',
'description' => array('Compte de J. DUPOND', 'Créé pour démonstration'),
'objectClass' => 'person'
);
$requete = ldap_add($ldap,
'cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
$objet);
if (false === $requete) die('L\'ajout a échoué');
?>
Autre exemple, dans le cas d'une déclaration s'appuyant sur plusieurs classes:
<?php
// Extrait de code (on suppose l'authentification préalablement établie)
// $ldap est la valeur retour de ldap_connect()
$objet = [
'sn' => 'DUPOND',
'uid' => 'jdupond', // posixAccount (requis)
'uidNumber' => '1100', // posixAccount (requis)
'gidNumber' => '1111', // posixAccount (requis)
'homeDirectory' => '/home/jdupond', // posixAccount (requis)
'postalAddress' => 'rue du tutoriel', // organizationalPerson
'objectClass' => ['organizationalPerson', 'posixAccount']
];
$requete = ldap_add($ldap,
'cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
$objet);
if (false === $requete) die('L\'ajout a échoué');
?>
<?php
// Extrait de code (on suppose l'authentification préalablement établie)
// $ldap est la valeur retour de ldap_connect()
$objet = array(
'sn' => 'DUPOND',
'uid' => 'jdupond', // posixAccount (requis)
'uidNumber' => '1100', // posixAccount (requis)
'gidNumber' => '1111', // posixAccount (requis)
'homeDirectory' => '/home/jdupond', // posixAccount (requis)
'postalAddress' => 'rue du tutoriel', // organizationalPerson
'objectClass' => array('organizationalPerson', 'posixAccount')
);
$requete = ldap_add($ldap,
'cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
$objet);
if (false === $requete) die('L\'ajout a échoué');
?>
6.16.3.4.3.La modification d'un objet
Si vous souhaitez apporter une modification à un objet, vous devrez faire appel à la fonction
ldap_modify() en utilisant les mêmes types de paramètres que la fonction
ldap_add() à savoir:
- La ressource LDAP (retournée par ldap_connect())
- Une chaîne de caractères précisant le DN de l'objet à modifier (ex: cn=Heute Damien,ou=redacteurs,dc=phpfacile,dc=com)
- Un tableau contenant les attributs à modifier (avec si besoin le ou les attributs objectClass). Les clés préciseront le nom de l'attribut (peu importe la casse: majuscules, minuscules, mélanges) et les valeurs associées peuvent être:
- soit des chaînes de caractères
- soit des tableaux indexés contenant des chaînes de caractères (dans le cas d'attributs multivalués)
|
|
<?php
// Extrait de code (on suppose l'authentification préalablement établie)
// $ldap est la valeur retour de ldap_connect()
$attributsAModifier = [
'telephoneNumber' => '+33 0 00 00 00 01',
];
$requete = ldap_modify($ldap,
'cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
$attributsAModifier);
if (false === $requete) die('La modification a échoué');
?>
<?php
// Extrait de code (on suppose l'authentification préalablement établie)
// $ldap est la valeur retour de ldap_connect()
$attributsAModifier = array(
'telephoneNumber' => '+33 0 00 00 00 01',
);
$requete = ldap_modify($ldap,
'cn=Dupond Jean,ou=redacteurs,dc=phpfacile,dc=com',
$attributsAModifier);
if (false === $requete) die('La modification a échoué');
?>
6.16.3.4.4.La suppression d'un objet
La suppression d'une entrée dans l'annuaire LDAP se fait par l'appel de la fonction
ldap_delete() avec 2 paramètres:
- La ressource LDAP (retournée par ldap_connect())
- L'identifiant de l'objet à supprimer (autrement dit son DN: ex. "cn=dheute,dc=phpfacile,dc=com")
|
<?php
// Extrait de code (on suppose l'authentification préalablement établie)
// $ldap est la valeur retour de ldap_connect()
$requete = ldap_delete($ldap,
'cn=DUPOND Jean,ou=redacteurs,dc=phpfacile,dc=com');
if (false === $requete) die('La suppression a échoué');
?>
6.16.3.5.Conclusion
Les fonctions de l'extension ldap de PHP permettent bien l'accès aux données d'un annuaire LDAP tant en lecture qu'en écriture.
En revanche, il faut 3 appels de fonctions pour préciser les paramètres de connexion et l'authentification. Et l'accès aux résultats de recherche n'est pas des plus aisés (avec ces tableaux imbriqués).
On voit aisément que l'utilisation d'une bibliothèque pourrait nous simplifier la vie. Pour cela nous vous invitons à accéder au tutoriel décrivant les mêmes opérations (et plus) mais en utilisant la bibliothèque
zend-ldap qui fait partie de Zend Framework:
Tutoriel zend-db.