2013-07-19 2 views
0

Ceci est ma syntaxe originale:LDAP utilisation dn syntaxe

$dn = "OU=Users,OU=NA1,DC=corp,DC=pvt"; 

Je veux ajouter une unité d'organisation à $dn.

La structure du répertoire est la suivante.
OU=NA1, il y a 2 répertoires actifs sous NA1: Les utilisateurs et les contacts

Je voudrais appeler les deux répertoires actifs dans quelque chose d'une seule ligne comme ci-dessous. (Note: cette syntaxe ne fonctionne pas)

$dn = "OU=Users+Contacts,OU=NA1,DC=corp,DC=pvt"; 

Y a-t-il un moyen d'ajouter les deux répertoires actifs sur une seule ligne?

+0

Quelle opération vous essayez d'effectuer une recherche? – DaveRandom

Répondre

1

Pour les opérations de lecture, PHP prend en charge une fonctionnalité appelée recherches parallèles. Ce n'est pas aussi simple que vous le souhaiteriez, mais vous pouvez obtenir les résultats souhaités en une seule opération.

$links = array($link, $link); // yes, two references to the same link 

$DNs = array(
    'OU=Users,OU=NA1,DC=corp,DC=pvt', 
    'OU=Contacts,OU=NA1,DC=corp,DC=pvt' 
); 

$filter = 'attr=val'; 

// a regular call to ldap_search() 
// only now, $results is and array of result identifiers 
$results = ldap_search($links, $DNs, $filter); 

Vous pouvez envelopper cela en une fonction qui rendrait l'appel plus simple, quelque chose comme:

function ldap_multi_search($link, array $dns, $filter, array $attributes = null, $attrsonly = null, $sizelimit = null, $timelimit = null, $deref = null) 
{ 
    $dns = array_values($dns); 
    $links = array_fill(0, count($dns), $link); 

    $results = ldap_search($links, $dns, $filter, $attributes, $attrsonly, $sizelimit, $timelimit, $deref); 

    $retVal = array(); 
    foreach ($results as $i => $result) { 
     if ($result === false) { 
      trigger_error('LDAP search operation returned error for DN ' . $dns[$i], E_USER_WARNING); 
      continue; 
     } 

     $entries = ldap_get_entries($result); 
     unset($result['count']); // we'll calculate this properly at the end 

     $retVal = array_merge($retVal, array_values($entries)); 
    } 
    $entries['count'] = count($entries); 

    return $entries; 
} 
Questions connexes