Finding Entries in the Directory

Find a Single Entry

You can easily find a single record by passing an LDAP search filter to the find method. This method will return the first entry from the results.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php
$searchfilter = 'cn=juser';

$row = $ldap->find($searchfilter);

// This will return an array of data or an empty array. The array will be
// 'cleaned' up to be more user-friendly.
// The returned result will ALWAYS include the user's DN.

// $row might look like:

[
    'cn'=>'juser',
    'fullname'=>'Joe User',
    'email'=>'juser@mycompany.org',
    'dn'=>'CN=juser,OU=users,OU=mycompany,OU=org'
]

Find All Entries

You can also find all entries matching a search filter.

1
2
3
4
5
6
7
8
<?php
// $searchfilter can be as complex as you need
// $searchfilter = (|(sn=smit*)(givenname=jo*));

$searchfilter = 'locality=Edmonton';
$rows = $ldap->findAll($searchfilter);

// $rows will be an multi-dimensional array of entries.

Finding Entries by Attribute

The LdapSearch() class comes with convenience methods for finding entries by any attribute in the directory. The default attributes are:

1
2
3
4
5
6
7
<?php
[
    'lastname'=>'sn',
    'firstname'=>'givenname',
    'userid'=>'cn',
    'locality'=>'l'
]

The keys in this array matches the name of the method you are calling. The value in the array matches the actual directory attribute. See the example below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
// Find all entries by last name
// The method name is the upper case first of the key in the array.
$rows = $ldap->findAllByLastname('smith');

// Find a single entry by lastname (ldap_first_entry is used)
$row = $ldap->findOneByLastname('Smith');

// More likely you would use something like the cn (userid)
$row = $ldap->findOneByUserid('juser');

As with the find() and findAll() methods, you can pass more arguments as required. See the PHP documentation on the additional attributes.

1
2
<?php
$row = $ldap->findAllByLastname('smith*', $attributes, $dn, $attrsonly, $sizelimit, $timelimit, $deref);

Additionally, you can find entries by multiple attributes using booleans (and/or). For example:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<?php
// Boolean And
$rows = $ldap->findAllByLastnameAndFirstname('User', 'J*');

// Boolean Or
$rows = $ldap->findAllByLocalityOrPostalcode('City', 'T6H 3S5');

// Boolean Or using the same attribute 2x
$rows = $ldap->findAllByLastnameOrLastname('User', 'Doe');

// The same methods work with `findOneBy()` as well, though this may be less useful, depending on
// what you are searching for

$row = $ldap->findOneByLastnameAndFirstname('User', 'Joe');

Setting FindBy Attributes

You can customize the 'findBy' attributes to suit your directory set up. The findByAttributes are a key value pair where the key is your findBy method name, and the value is the actual attribute in the directory.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php
$ldap->setFindByAttribute('fullName', 'displayname');
// The , character is escaped by default. Don't escape for now :)
$ldap->setEscapeChars();
$rows = $ldap->findOneByFullName('User, Joe');

// Set all findBy attributes

$findby = [
    'userid'=>'samaccountname',
    'surname'=>'sn',
    'commonName'=>'cn'
];
$ldap->setFindByAttributes($findby);

// This will set the search filter to cn=myname
$rows = $ldap->findAllByCommonName('myname');