W mojej firmie komputery pracują w domenie. Użytkownicy logują się do nich za pomocą kont domenowych. Próbuję z serwera LDAP pobrać imię, nazwisko oraz adres e-mail. Niestety działanie skryptu kończy się ostrzeżeniem:

Warning: ldap_search(): Search: Operations error in C:\webserver\data\htdocs\ldap.php on line 11

<?php
	try
	{
		$ldapConnection = ldap_connect("ad.domena.pl");
		$path = "OU=Użytkownicy,OU=Piła,OU=Regiony,DC=ad,DC=domena,DC=pl";
		
		ldap_set_option ($ldapConnection, LDAP_OPT_REFERRALS, 0);
		ldap_set_option($ldapConnection, LDAP_OPT_PROTOCOL_VERSION, 3);

		$searchFilter = "(cn=*)";
		$search=ldap_search($ldapConnection, $path, $searchFilter);
		$usersData = ldap_get_entries($ldapConnection, $search);  
		
		if ($usersData["count"] > 0)
		{
			foreach ($usersData as $userData)
			{
				echo "{$userData["cn"][0]} : {$userData["mail"][0]}";
			}
			ldap_close($ldapConnection);
		}
	}
	catch (Exception $e)
	{
		echo "Wystąpił wyjątek\n\n:" . $e->getCode() . " : " . $e->getMessage();
	}
?>

Stworzyłem analogiczny kod w C# i wszystko działa bez zastrzeżeń.

using System;
using System.DirectoryServices;

namespace activeDirectoryLdapExamples
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                DirectoryEntry ldapConnection = new DirectoryEntry("ad.domena.pl");
                ldapConnection.Path = "LDAP://OU=Użytkownicy,OU=Piła,OU=Regiony,DC=ad,DC=domena,DC=pl";

                DirectorySearcher search = new DirectorySearcher(ldapConnection);
                search.Filter = "cn=*";
                SearchResultCollection usersData = search.FindAll();

                if (usersData.Count > 0)
                {
                    foreach ( SearchResult userData in usersData)
                    {
                        Console.WriteLine(string.Format("{0} : {1}", userData.Properties["cn"][0].ToString(), userData.Properties["mail"][0].ToString()));
                    }
                }
                ldapConnection.Close();
            }
            catch (Exception e)
            {
                Console.WriteLine("Wystąpił wyjątek:\n\n" + e.HResult + " : " + e.Message);
            }

            Console.ReadLine();
        }
    }
}

Żeby Outlook pobierał dane z książki adresowej LDAP muszą być poniższe ustawienia
screenshot-20190121121617.png