doutan6286 2016-01-22 20:51 采纳率: 100%
浏览 84

PHP AD LDAP脚本仅在传递变量时失败

Sample AD LDAP Live Lookup PHP from Helpspot

Okay so I am using the above sample php LDAP script to lookup user info in our ticketing system. I am running into some issues however (these are probably due to my very rudimentary understanding of PHP). I know the script is sort of working because if I hit the URL for the script in my browser it will spit back a list of all users in the domain until it hit the return limit and just stops. I am sure I could get it to spit back more, but that is not really the issue right now. Because I am getting data from my domain I am assuming that my creds and binds are good in the script. We use the credentials, server, etc on all our MFP's for their global address list without issue so I am positive I am good there. The problem arises when you pass anything to it to do a lookup. I receive an error that states:

ldap search failed: Operations error 

When I tweak the script to give me a little more info it points me back to this line:

$search = ldap_search($ad, $dn, $filter, $attrs)
          or die ("ldap search failed: ".ldap_error($ad));

Which I had suspected given the error I was getting is present in this line. So I am assuming one of those defined variables is the culprit causing me problems. This is where i start to get lost. I am not understanding why asking it to narrow the results returned would break this? Any suggestions? Or is there anything more I need to share?

  • 写回答

1条回答 默认 最新

  • dttvb115151 2016-01-25 21:22
    关注

    Thank you @heiglandreas that post helped me immensely. Using the script being run in that section I was able to grab some pieces that allowed my script to function properly. I am not sure exactly why my environment didn't care for my first script, I suspect the change in location in the script of certain steps and the changed formatting of the bind helped. My script now looks like:

        <?php
    header('Content-type: text/xml');
    
    $hostname="ldap://SERVER IP ADDRESS";
    $ds=ldap_connect($hostname, 389);
    $user = "domain\username";
    $pswd = "PASSWORD";
    ldap_set_option ($ds, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP opt referrals');
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version');
    
    if ($ds)
    {
    $dn = "DC=DOMAIN,DC=local";
    
    if (!($ldapc=ldap_bind($ds, $user, $pswd))) { 
        echo "<p>Error:" . ldap_error($ds) . "</p>"; 
        echo "<p>Error number:" . ldap_errno($ds) . "</p>"; 
        echo "<p>Error:" . ldap_err2str(ldap_errno($ds)) . "</p>"; 
        die;
    } 
    
    $attributes = array('employeeID','givenname','sn','mail','telephoneNumber');
    
    if(!empty($_GET['customer_id'])){   //If an ID is passed in use that to make a direct lookup
    
        $filter = 'employeeID='.$_GET['customer_id'].'*';   
    
    }elseif(!empty($_GET['email'])){            //If no ID then try email
    
        $filter = 'mail='.$_GET['email'].'*';
    
    }elseif(!empty($_GET['last_name'])){    //If no ID or email then search on last name
    
        $filter = 'sn='.$_GET['last_name'].'*';
    
    
    
    }elseif(!empty($_GET['first_name'])){   //Try first name if no ID,email,last name
    
        $filter = 'givenname='.$_GET['first_name'].'*'; 
    
    }else{
        $filter = 'sn='.'*';    //Return everyone
    }
    
    
    $search = ldap_search($ds, $dn, $filter, $attributes)
              or die ("ldap search failed: ".ldap_error($ds));
    
    $entries = ldap_get_entries($ds, $search);
    
    echo '<?xml version="1.0" encoding="utf-8"?>';
    }
    ?>
    <livelookup version="1.0" columns="first_name,last_name, email">
            <?php for ($i=0; $i < $entries["count"]; $i++) : ?>
            <customer>
                    <customer_id><?php if(isset($entries[$i]['employeeID'][0])){ echo htmlspecialchars($entries[$i]['employeeID'][0]); } ?></customer_id>
                    <first_name><?php if(isset($entries[$i]['givenname'][0])){ echo htmlspecialchars($entries[$i]['givenname'][0]); } ?></first_name>
                    <last_name><?php if(isset($entries[$i]['sn'][0])){ echo htmlspecialchars($entries[$i]['sn'][0]); } ?></last_name>
                    <email><?php if(isset($entries[$i]['mail'][0])){ echo htmlspecialchars($entries[$i]['mail'][0]); } ?></email>
                    <phone><?php if(isset($entries[$i]['telephonenumber'][0])){ echo htmlspecialchars($entries[$i]['telephonenumber'][0]); } ?></phone>
                    <!-- Add custom elements here. Simply add them to $attrs above and then output the tag like the others here -->
            </customer>
            <?php endfor; ?>
    </livelookup>
    
    <?php ldap_unbind($ds); ?>
    
    评论

报告相同问题?

悬赏问题

  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办