Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php活动目录查找_Php_Active Directory_Ldap - Fatal编程技术网

php活动目录查找

php活动目录查找,php,active-directory,ldap,Php,Active Directory,Ldap,我正在尝试进行ldap授权,然后对组中的成员身份进行二次检查。系统是一台运行PHP5.3.10的Ubuntu机器,通过Server2008 R2 Active Directory进行身份验证。我似乎无法让ldap_search()正常工作。我已经从jExplore中提取了DN,因此我非常确定DN是正确的。ldap_bind(在另一个函数中)与凭据一起工作,因此我确信服务器和用户名/密码是有效的。错误: PHP Warning: ldap_search(): Search: Operations

我正在尝试进行ldap授权,然后对组中的成员身份进行二次检查。系统是一台运行PHP5.3.10的Ubuntu机器,通过Server2008 R2 Active Directory进行身份验证。我似乎无法让ldap_search()正常工作。我已经从jExplore中提取了DN,因此我非常确定DN是正确的。ldap_bind(在另一个函数中)与凭据一起工作,因此我确信服务器和用户名/密码是有效的。错误:

PHP Warning:  ldap_search(): Search: Operations error in /var/www/zzz.php on line 28
守则:

$ldap = ldap_connect('ldap://xxx.xxx');

$admins = $auth['admin'];
// User not logged in, user level '0'
if (!isset($user))
{
    return 0;
}

    // DN
    $group_dn = 'CN=IT Employees,OU=groups,OU=users,OU=xxx,DC=xxx,DC=xxx';
    // Filter
    $filter = '(sAMAccountName=' . $user . ')';
    // Attributes
    $attr = array("memberof","givenname");
echo $group_dn.' '.$filter.' '.$attr.'<br />';

    // Check if the user is a member of the Admin Group
    $SubGroups = ldap_search($ldap, $group_dn, $filter, $attr); //Search the admin group for user.

    $debug = ldap_get_entries($ldap, $SubGroups);
    echo $debug['count'];

    if ($debug['count']>>0)
    {
        // Yep, you are set admin. (User level 2)
        echo "Admin Set<br />";
      return 2;
    }
    else
    {
        // Failure. Thou art a normal user. (User level 1)
        echo "Admin Denied<br />";
        return 1;
    }
}
$ldap=ldap\u connect('ldap://xxx.xxx');
$admins=$auth['admin'];
//用户未登录,用户级别“0”
如果(!isset($user))
{
返回0;
}
//DN
$group_dn='CN=IT员工,OU=groups,OU=users,OU=xxx,DC=xxx,DC=xxx';
//滤器
$filter='(sAMAccountName='.$user.');
//属性
$attr=数组(“memberof”、“givenname”);
echo$group_dn.'.$filter.'.$attr.
; //检查用户是否是管理员组的成员 $SubGroups=ldap\u search($ldap、$group\u dn、$filter、$attr)//在管理员组中搜索用户。 $debug=ldap\u get\u条目($ldap,$SubGroups); echo$debug['count']; 如果($debug['count']>>0) { //是的,你被设置为管理员。(用户级别2) 回显“管理集
”; 返回2; } 其他的 { //失败。您是普通用户。(用户级别1) 回显“管理员拒绝
”; 返回1; } }
我认为这个过滤器应该可以工作:

(&(objectClass=user)(sAMAccountName=yourUserName)
  (memberof=CN=YourGroup,OU=Users,DC=YourDomain,DC=com))
嗯,我相信这可以调整为适合你

-吉姆

需要换成

$ldap = ldap_connect('ldap://xxx.xxx');
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_start_tls($ldap);
$bind= ldap_bind($ldap, 'user','pass');

也许可以检查一下$ldap是否是一个有效的资源?这个问题的答案应该会帮助您:谢谢您的建议,Matthew,但它并没有解决这个问题:(ldap_绑定在哪里?我是否遗漏了什么?通常情况下,您必须绑定到LDAPYep,这就是问题所在!我在一个函数中设置了连接和绑定,并且只在此处的部分进行了连接。我想我需要努力使代码不那么复杂!)
$ldap = ldap_connect('ldap://xxx.xxx');
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_start_tls($ldap);
$bind= ldap_bind($ldap, 'user','pass');