LDAP PHP
Par PlaceOweb le jeudi, novembre 6 2008, 19:51 - PHP - Lien permanent
Besoin de communiquer avec un annuaire LDAP en PHP ?
Programmer en PHP pour communiquer avec LDAP
PHP LDAP
- Présentation de l'API PHP pour LDAP, exemples de consultation, ajout et modification.
- Ecrire un mot de passe MD5
$userPassword = '{MD5}' . base64_encode(pack('H*',md5("motDePassEnClair")));
Erreurs rencontrés
Erreurs LDAP PHP
- Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Protocol error in
En PHP lors de l'utilisation de ldap_bind, il faut préciser le protocole LDAP utilisé tel que l'expilque Unable to bind to server
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
- Warning: ldap_add() [function.ldap-add]: Add: Invalid syntax in
Vous essayer d'écrire des données qui ne sont pas converties en UTF-8
$l[cn] = 'Sébastien Loeb';
devient
$l[cn] = utf8_encode('Sébastien Loeb');
- Warning: ldap_add() [function.ldap-add]: Add: Object class violation in
Vérifiez que l'attribut de que vous renseignez correspond à l'objectClass que vous avez définit et inversement. Par exemple vous ne pouvez pas renseigner l'attribut "uid" dans un objectClass "person", pour cela vous devez rajouter l'objetClass "inetOrgPerson"
- Warning: ldap_add() [function.ldap-add]: Add: Naming violation in
ldap_add ( resource $link_identifier, string $dn, array $entry )
Un peu identique au précédent, vous essayer de définir un DN dans spécifier l'attribut, par exemple $dn="uid=Christophe, ou=people, dc=nodomain" et vous avez oubliez de définir $entry['uid']="Christophe";
- Warning: ldap_add() [function.ldap-add]: Add: Already exists in
Vous essayer d'ajouter un DN déjà existant, utilisez ldap_modify pour remplacer votre objet ou ldap_mod_replace pour remplacer ses attributs.
- Warning: ldap_mod_replace() [function.ldap-mod-replace]: Modify: No such object in
Vous essayer de remplacer des attributs d'un DN qui n'existe pas, utilisez ldap_add pour l'ajouter.
- Problème de temps réseau avec ldap : timeout
Pour palier à l'attente infinie de la connexion/bind de php sur votre serveur LDAP, il fallait rajouter une option :
$ld = ldap_connect("ldap.placeoweb.com"); ldap_set_option($ld, LDAP_OPT_NETWORK_TIMEOUT, 10); /* 10 second timeout */ ldap_bind($ld);
Script de migration d'une base de donnée vers un annuaire LDAP
Abstraction de la couche LDAP
En abstracteur de base de données LDAP vous disposez de :
- ADOdb Database Abstraction Library for PHP gérant LDAP (sur wikipedia)
- Zend_Ldap
- De slapOrm, un ORM simple pour LDAP dans PHP construit pour être utilisé avec le framework symfony.
Pour rechercher un connecteur permettant d'autres drivers que LDAP, consultez l'article sur ADOdb PDO PEAR MDB2 Zend_Db
Ressources
- Lightweight Directory Access Protocol par php.net
- PHP - Connexion à un annuaire LDAP par commentcamarche.net
- Connexion au serveur LDAP
- Ajouter une entrée avec ldap_add()
- Comparer une entrée avec ldap_compare()
- Supprimer une entrée avec ldap_delete()
- Modifier une entrée avec ldap_modify()
- Rechercher une entrée avec ldap_search()
- Traitement des résultats
- Récupérer le nombre d'entrées retournées par une recherche avec ldap_search()
- Récupérer les entrées retournées