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.
Ici vous pouvez apprendre :
1.Introduction
2.Installation de PHP
3.Exécuter un script PHP
4.Configuration et environnement d'exécution de PHP
5.L'environnement de développement
6.Le langage PHP
6.1.Introduction
6.2.Mon premier script
6.3.La syntaxe
6.4.Les boucles (for, while, foreach, do) en PHP
6.5.Les tableaux (array) en PHP
6.6.Les fonctions
6.7.Include
6.8.Programmation orientée objet
6.9.Les fonctions de manipulation de tableaux
6.10.Les dates
6.11.Fichiers et répertoires
6.12.Les paramètres d'entrée d'un script PHP
6.13.Utilisation de la librairie graphique
6.14.JpGraph pour tracer courbes et diagrammes
6.15.Utilisation de bases de données avec PHP
6.16.LDAP
6.16.1.Introduction
6.16.2.Installation de l'extension ldap
6.16.3.Accès via les fonctions de l'extension ldap
6.16.3.1.Introduction
6.16.3.2.Connexion, authentification, paramétrage
6.16.3.3.L'accès en lecture (recherche d'objets)
6.16.3.4.L'accès en écriture
6.16.3.4.1.Introduction
6.16.3.4.2.L'ajout d'un objet
6.16.3.4.3.La modification d'un objet
6.16.3.4.4.La suppression d'un objet
6.16.3.5.Conclusion
6.17.Parser un document XML
6.18.Génération de documents PDF en PHP
6.19.Envoyer un mail
6.20.Créer un webmail avec IMAP
6.21.Droits utilisateurs: chmod 777
6.22.Localization (l10n) et Traduction
7.PHP pour le web
8.Internationalisation (i18n) et encodage en PHP
9.Créer un fichier de logs/traces
10.Déboguer une application PHP
11.Programmer en PHP en toute sécurité
12.Bibilothèque PEAR
13.Zend Framework 2 et 3
14.Installation de Zend Framework 2
15.Joomla
16.Composer
17.PHPUnit
18.PHPDocumentor
19.Mesure de temps d'exécution (benchmark) d'une fonction PHP
20.Exemples de scripts PHP
21.Erreurs fréquentes et les solutions
22.Archives
Version imprimable: imprimer