2011-01-17 2 views
1

Привет У меня есть PHP-скрипт, который ищет мой AD, но как я могу заставить его искать более одного DN. Я пробовал exmample на php.net и не могу заставить его работать.Поиск нескольких AD DN сPHP

Помощь оценили:

<?php echo "<?xml version='1.0' encoding='utf-8' ?>" ?><?php echo "<ul class='LSRes'>" ?> 
    <?php 
    if(isset($_GET['q']) &&!empty($_GET['q'])){ 
    // all your ldap code 

    // Designate a few variables 
    $host = "10.10.10.10"; // Add in your AD host name or IP 
    $user = "DOMAIN\user"; // Add in your AD access account user name 
    $pswd = "password"; // Add in your AD access account user name password 

    $ds = ldap_connect($host) 
      or die("Could not connect!"); 

    // Set version number 
    ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3) 
     or die ("Could not set ldap protocol"); 

    // Binding to ldap server 
    $bd = ldap_bind($ds, $user, $pswd) 
      or die ("Could not bind"); 

    // Create the DN - Add in the OU of your AD 
    $dn[] = "OU=uk,OU=Accounts,DC=mywebsite,DC=com"; 
    $dn[] = "OU=us,OU=Accounts,DC=mywebsite,DC=com"; 

    $id[] = $ds; 
    $id[] = $ds; 


    //$filter = 'samaccountname='.$_POST['username']; 
    $filter = "(|(givenName=".$_GET['q']."*) (sn=".$_GET['q']."*) (displayname=".$_GET['q']."*) (samaccountname=".$_GET['q']."*))"; 



    $result = ldap_search($id,$dn,$filter); 

    $search = false; 

    foreach ($result as $value) { 
     if(ldap_count_entries($ds,$value)>0){ 
      $search = $value; 
      break; 
     } 
    } 

    if($search){ 
     $entries = ldap_get_entries($ds, $search); 
    } 


    if ($entries["count"] > 0) { 
    for ($i=0; $i<$entries["count"]; $i++) { 

    echo "<span class='LSstyle'>Name: <strong><a href=\"mailto:".$entries[$i]["mail"][0]."\">".$entries[$i]["displayname"][0]." ".$entries[$i]["sn"][0]."</a></strong></span><br />"; 
    echo "<span class='LSstyle'>Short name: <strong>".$entries[$i]["samaccountname"][0]."</strong></span><br />"; 
    echo "<span class='LSstyle'>Phone: <strong>".$entries[$i]["telephonenumber"][0]."</strong></span><br />"; 
    echo "<span class='LSstyle'>Title: <strong>".$entries[$i]["title"][0]."</strong></span><br />"; 
    echo "<span class='LSstyle'>Dept: <strong>".$entries[$i]["department"][0]."</strong></span></p>"; 
    } 
    } else { 
    echo "<span class='LSstyle_noresults'><strong>No results found</strong></span>"; 
    } 
    ldap_unbind($ad); 
    } 
    ?> 
+0

что не работает? Есть ли ошибка? Вы уверены, что вам просто не нужно зацикливать $ dn? и сделать второй ldap_search? –

ответ

1

Видя, как ldap_search не принимает массив как $ base_dn, вы, вероятно, придется петлевой $ дп, как предложено Viper_Sb.

+0

Странно, что происходит, я выполняю поиск, и результаты возвращаются из первого DN. Я выполняю второй поиск и получаю результаты от второго БД, третий поиск и снова получаю результаты от первого dn, и поэтому он продолжает чередовать результаты от каждого DN! Не могли бы вы объяснить цикл более подробно? Спасибо – Mat

+0

Я основываю свою информацию строго из руководства PHP - я ее на самом деле не использовал. foreach ($ dn as $ d) { $ result = ldap_search ($ id, $ d, $ filter); ... } – Chris

Смежные вопросы