<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.jordan-lenuff.com/index.php?action=history&amp;feed=atom&amp;title=Technique%2FPHP%2FScripts%2FSynchronisation_Active_Directory</id>
	<title>Technique/PHP/Scripts/Synchronisation Active Directory - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.jordan-lenuff.com/index.php?action=history&amp;feed=atom&amp;title=Technique%2FPHP%2FScripts%2FSynchronisation_Active_Directory"/>
	<link rel="alternate" type="text/html" href="https://wiki.jordan-lenuff.com/index.php?title=Technique/PHP/Scripts/Synchronisation_Active_Directory&amp;action=history"/>
	<updated>2026-04-27T01:50:19Z</updated>
	<subtitle>Historique des révisions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>https://wiki.jordan-lenuff.com/index.php?title=Technique/PHP/Scripts/Synchronisation_Active_Directory&amp;diff=217&amp;oldid=prev</id>
		<title>Jordan : Page créée avec « ==Présentation== Cette page a pour objet de présenter un script PHP permettant de se connecter à un Active Directory pour y récupérer une liste d'utilisateurs sous fo... »</title>
		<link rel="alternate" type="text/html" href="https://wiki.jordan-lenuff.com/index.php?title=Technique/PHP/Scripts/Synchronisation_Active_Directory&amp;diff=217&amp;oldid=prev"/>
		<updated>2019-09-20T08:15:50Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « ==Présentation== Cette page a pour objet de présenter un script PHP permettant de se connecter à un Active Directory pour y récupérer une liste d&amp;#039;utilisateurs sous fo... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Présentation==&lt;br /&gt;
Cette page a pour objet de présenter un script PHP permettant de se connecter à un Active Directory pour y récupérer une liste d'utilisateurs sous forme de tableau.&lt;br /&gt;
&lt;br /&gt;
==get_ADusers.php==&lt;br /&gt;
Ce script, pouvant se nommer &amp;lt;code&amp;gt;get_ADusers.php&amp;lt;/code&amp;gt;, contient, à ce jour, le contenu suivant :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function get_ADusers(array $ADgroups = array())&lt;br /&gt;
{&lt;br /&gt;
	/////////////////////////////////////////////////////////////////&lt;br /&gt;
	// Cette fonction a pour but de retourner une liste            //&lt;br /&gt;
	// d'utilisateurs sous forme d'un tableau (array) $users       //&lt;br /&gt;
	//                                                             //&lt;br /&gt;
	// Cette fonction prend en argument la liste des groupes sous  //&lt;br /&gt;
	// forme d'un tableau (array) $ADgroups                        //&lt;br /&gt;
	//                                                             //&lt;br /&gt;
	// Cette fonction va interroger l'Active Directory et          //&lt;br /&gt;
	// rechercher les utilisateurs appartenants aux groupes donnés //&lt;br /&gt;
	/////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
	///////////////////////////////&lt;br /&gt;
	// Déclaration des variables //&lt;br /&gt;
	///////////////////////////////&lt;br /&gt;
&lt;br /&gt;
	// Variable contenant la liste des utilisateurs à retourner&lt;br /&gt;
	$users = array();&lt;br /&gt;
&lt;br /&gt;
	//////////////////////////////////////&lt;br /&gt;
	// Fin de déclaration des variables //&lt;br /&gt;
	//////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
	////////////////&lt;br /&gt;
	// Paramètres //&lt;br /&gt;
	////////////////&lt;br /&gt;
&lt;br /&gt;
	// Serveur AD&lt;br /&gt;
	$ADserver = 'ldap://myADserver.myDomain.com';&lt;br /&gt;
&lt;br /&gt;
	// Port du serveur AD&lt;br /&gt;
	$ADport = '389';&lt;br /&gt;
&lt;br /&gt;
	// Utilisateur autorisé à interroger l'AD&lt;br /&gt;
	$ADuser = 'CN=myQueryADuser,OU=AppUsers,OU=Users,DC=myDomain,DC=com';&lt;br /&gt;
&lt;br /&gt;
	// Mot de passe de l'utilisateur autorisé à interroger l'AD&lt;br /&gt;
	$ADpassword = 'xxxxxxxxxxxxxx';&lt;br /&gt;
&lt;br /&gt;
	// Branche de base de l'AD à partir de laquelle faire la recherche&lt;br /&gt;
	$ADbaseDN = 'DC=myDomain,DC=com';&lt;br /&gt;
&lt;br /&gt;
	////////////////////////&lt;br /&gt;
	// Fin des paramètres //&lt;br /&gt;
	////////////////////////&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	/////////////////////////&lt;br /&gt;
	// Recherche dans l'AD //&lt;br /&gt;
	/////////////////////////&lt;br /&gt;
&lt;br /&gt;
	// Construction du filtre de recherche de l'AD&lt;br /&gt;
	// Si qu'un seul groupe défini&lt;br /&gt;
	if (count($ADgroups) == 1)&lt;br /&gt;
		// Définition d'un filtre unique&lt;br /&gt;
		$ADfilter = &amp;quot;(cn=$ADgroups[0])&amp;quot;;&lt;br /&gt;
	// Sinon, si plusieurs groupes définis&lt;br /&gt;
	elseif (count($ADgroups) &amp;gt; 1)&lt;br /&gt;
	{&lt;br /&gt;
		// Définition d'un filtre multiple&lt;br /&gt;
		$ADfilter = &amp;quot;(|&amp;quot;;&lt;br /&gt;
		foreach ($ADgroups as $group)&lt;br /&gt;
			$ADfilter .= &amp;quot;(cn=$group)&amp;quot;;&lt;br /&gt;
		$ADfilter .= &amp;quot;)&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	// Connexion à l'AD&lt;br /&gt;
	$ADcnx = ldap_connect($ADserver);&lt;br /&gt;
	&lt;br /&gt;
	// Définition des options de la connexion à l'AD&lt;br /&gt;
	ldap_set_option($ADcnx, LDAP_OPT_REFERRALS, 0);&lt;br /&gt;
	ldap_set_option($ADcnx, LDAP_OPT_PROTOCOL_VERSION, 3);&lt;br /&gt;
	&lt;br /&gt;
	// Authentification sur l'AD&lt;br /&gt;
	$ADauth = ldap_bind($ADcnx, $ADuser, $ADpassword);&lt;br /&gt;
&lt;br /&gt;
	// Construction de la requête de recherche&lt;br /&gt;
	$ADquery = ldap_search($ADcnx, $ADbaseDN, $ADfilter);&lt;br /&gt;
	&lt;br /&gt;
	// Interrogation et récupération des résultats&lt;br /&gt;
	$ADresults = ldap_get_entries($ADcnx, $ADquery);&lt;br /&gt;
&lt;br /&gt;
	///////////////////////////////////&lt;br /&gt;
	// Fin de la recherche dans l'AD //&lt;br /&gt;
	///////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//////////////////////////////&lt;br /&gt;
	// Traitement des résultats //&lt;br /&gt;
	//////////////////////////////&lt;br /&gt;
&lt;br /&gt;
	// Si la recherche a retouné au moins 1 résultat&lt;br /&gt;
	if ($ADresults[&amp;quot;count&amp;quot;] &amp;gt; 0)&lt;br /&gt;
	{&lt;br /&gt;
		// Variable contenant la liste des utilisateurs récupérés depuis l'AD&lt;br /&gt;
		$ADusers = array();&lt;br /&gt;
&lt;br /&gt;
		// Pour chaque résultat&lt;br /&gt;
		for ($i=0; $i&amp;lt;$ADresults[&amp;quot;count&amp;quot;]; $i++)&lt;br /&gt;
			// Si le résultat a une section &amp;quot;membre&amp;quot;&lt;br /&gt;
			if (!empty($ADresults[$i][&amp;quot;member&amp;quot;]))&lt;br /&gt;
				// Pour chaque membre&lt;br /&gt;
				for ($j=0; $j&amp;lt;$ADresults[$i][&amp;quot;member&amp;quot;][&amp;quot;count&amp;quot;]; $j++)&lt;br /&gt;
					// Enregistrement de l'utilisateur récupéré depuis l'AD&lt;br /&gt;
					$ADusers[]=$ADresults[$i][&amp;quot;member&amp;quot;][$j];&lt;br /&gt;
&lt;br /&gt;
		// Astuce pour supprimer les doublons et réorganiser l'index du tableau&lt;br /&gt;
		$ADusers = array_values(array_unique($ADusers));&lt;br /&gt;
&lt;br /&gt;
		// Pour chaque utilisateur récupéré de l'AD&lt;br /&gt;
		foreach($ADusers as $ADuserDN)&lt;br /&gt;
		{&lt;br /&gt;
			// Initialisation du tableau contenant les informations de l'utilisateur&lt;br /&gt;
			$user = array();&lt;br /&gt;
			&lt;br /&gt;
			// Construction du filtre de recherche de l'AD&lt;br /&gt;
			$ADfilter = &amp;quot;(distinguishedName=$ADuserDN)&amp;quot;;&lt;br /&gt;
			// Construction de la requête de recherche&lt;br /&gt;
			$ADquery = ldap_search($ADcnx, $ADbaseDN, $ADfilter);&lt;br /&gt;
			// Interrogation et récupération des résultats&lt;br /&gt;
			$ADresults = ldap_get_entries($ADcnx, $ADquery);&lt;br /&gt;
&lt;br /&gt;
			// Si la recherche a retourné un résultat&lt;br /&gt;
			if (!empty($ADresults))&lt;br /&gt;
				// Si la recherche a retourne un unique résultat&lt;br /&gt;
				if ($ADresults[&amp;quot;count&amp;quot;] == 1)&lt;br /&gt;
				{&lt;br /&gt;
					// Initialisation d'un tableau pour mettre en minuscule les clés.&lt;br /&gt;
					// En effet, bien que Windows soit insensible à la casse, PHP, quant&lt;br /&gt;
					// à lui, ne l'est pas. Certaines désignations d'attribut sont en minuscules&lt;br /&gt;
					// alors que d'autres comportent des majuscules (exemple : displayname et displayName)&lt;br /&gt;
					// Pour pallier cette situation, ce script va mettre toutes les désignations (clés)&lt;br /&gt;
					// en minuscules.&lt;br /&gt;
					$ADlowercaseResults = array();&lt;br /&gt;
					// Pour chaque résultat de la recherche&lt;br /&gt;
					foreach($ADresults[0] as $key =&amp;gt; $value)&lt;br /&gt;
						// Création d'une clé en minuscule depuis le résultat&lt;br /&gt;
						$ADlowercaseResults[strtolower($key)] = $value;&lt;br /&gt;
					&lt;br /&gt;
					// Alimentation de la variable $user avec les différentes informations de l'AD&lt;br /&gt;
					// Il est possible de rajouter autant d'information que disponible&lt;br /&gt;
					if (isset($ADlowercaseResults['cn']))&lt;br /&gt;
						$user['cn'] = $ADlowercaseResults['cn'][0];&lt;br /&gt;
					if (isset($ADlowercaseResults['company']))&lt;br /&gt;
						$user['company'] = $ADlowercaseResults['company'][0];&lt;br /&gt;
					if (isset($ADlowercaseResults['department']))&lt;br /&gt;
						$user['department'] = $ADlowercaseResults['department'][0];&lt;br /&gt;
					if (isset($ADlowercaseResults['displayname']))&lt;br /&gt;
						$user['displayname'] = $ADlowercaseResults['displayname'][0];&lt;br /&gt;
					if (isset($ADlowercaseResults['givenname']))&lt;br /&gt;
						$user['surname'] = $ADlowercaseResults['givenname'][0];&lt;br /&gt;
					if (isset($ADlowercaseResults['mail']))&lt;br /&gt;
						$user['mail'] = $ADlowercaseResults['mail'][0];&lt;br /&gt;
					if (isset($ADlowercaseResults['manager']))&lt;br /&gt;
						$user['manager'] = $ADlowercaseResults['manager'][0];&lt;br /&gt;
					if (isset($ADlowercaseResults['msexchuserculture']))&lt;br /&gt;
						$user['language'] = $ADlowercaseResults['msexchuserculture'][0];&lt;br /&gt;
					if (isset($ADlowercaseResults['sn']))&lt;br /&gt;
						$user['name'] = $ADlowercaseResults['sn'][0];&lt;br /&gt;
					if (isset($ADlowercaseResults['title']))&lt;br /&gt;
						$user['title'] = $ADlowercaseResults['title'][0];&lt;br /&gt;
					//if (isset($ADlowercaseResults['thumbnailphoto']))&lt;br /&gt;
					//	$user['thumbnailPhoto'] = $ADlowercaseResults['thumbnailphoto'][0];&lt;br /&gt;
					&lt;br /&gt;
					// Une fois les informations récupérées, ajout de l'utilisateur à la liste à retourner&lt;br /&gt;
					$users[] = $user;&lt;br /&gt;
				}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/////////////////////////////////////&lt;br /&gt;
	// Fin du traitement des résultats //&lt;br /&gt;
	/////////////////////////////////////&lt;br /&gt;
	&lt;br /&gt;
	// Fermeture de la connexion à l'AD&lt;br /&gt;
	ldap_close($ADcnx);&lt;br /&gt;
&lt;br /&gt;
	// Retour de la liste des utilisateurs&lt;br /&gt;
	return $users;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jordan</name></author>
		
	</entry>
</feed>