ldap_search()错误:成功

时间:2016-02-15 15:49:22

标签: php ldap ldap-query

这是我的代码:

$objLDAP = ldap_connect($_POST['host']);
$dn      = "OU=Users,DC=office,DC=example,DC=com";
if ($objLDAP)
{
    ldap_set_option($objLDAP, LDAP_OPT_REFERRALS, 0);
    ldap_get_option($objLDAP,LDAP_OPT_REFERRALS,$error);
    print_r($error."<br/>");
    ldap_set_option($objLDAP, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_get_option($objLDAP,LDAP_OPT_PROTOCOL_VERSION,$error);
    print_r($error."<br/>");

    $objBind = ldap_bind($objLDAP);
    print_r($objBind."<br/>");

    $sr = ldap_search($objLDAP, $dn, "sn=*","sn") or die("Error in search query: ".ldap_error($objLDAP));
    print_r($sr."<br />");
    print_r(ldap_error($objLDAP)."<br />");

    $info = ldap_get_entries($objLDAP, $sr);
    print_r($info["count"]);
    print_r(ldap_error($objLDAP));
    exit();
}

$ _POST [&#39; host&#39;]是有效的主机名,$ dn也是有效的树。但是,当我运行程序时,我正在

  

0
  3
  1
  成功
  搜索查询出错:成功

如果我使用ldap_errno,那么我在搜索查询中得到&#34;错误:0&#34;。

任何人都可以帮助我获取更多有意义的信息,说明为什么我无法获得$ info?

谢谢。

编辑: 还在调试。如果我将行更改为:

$sr = ldap_search($objLDAP,$dn,"(dn=*)") or die("Error in search query: ".ldap_error($objLDAP);

然后我得到

  

搜索查询错误:操作错误

但是我在第四个论点中添加的那一刻:

$sr = ldap_search($objLDAP,$dn,"(dn=*)","") or die("Error in search query: ".ldap_error($objLDAP);

然后我得到:

  

搜索查询错误:成功

另一个编辑: 根据下面的评论,我已经取出了or die(),只是继续进行程序流程。但我仍然没有在$ info中获得任何数据。

代码:

    ldap_set_option($objLDAP, LDAP_OPT_REFERRALS, 0);
    ldap_get_option($objLDAP,LDAP_OPT_REFERRALS,$error);
    print_r($error.": LDAP_OPT_REFERRALS<br/>");
    ldap_set_option($objLDAP, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_get_option($objLDAP,LDAP_OPT_PROTOCOL_VERSION,$error);
    print_r($error.": LDAP_OPT_PROTOCOL_VERSION<br/>");

    $objBind = ldap_bind($objLDAP);
    print_r($objBind.": objBind<br/>");
    print_r(ldap_error($objLDAP).": ldap_bind error<br/>");
    $sr = ldap_search($objLDAP,"OU=Users,DC=office,DC=example,DC=com","(sn=*)","");
    print_r($sr.": search result<br />");
    print_r(ldap_error($objLDAP).": ldap_search error<br />");
    $info = ldap_get_entries($objLDAP, $sr);
    print_r($info["count"].": number of entries returned<br />");
    print_r(ldap_error($objLDAP.": ldap_get_entries error<br />"));
    exit();

结果:

  

0:LDAP_OPT_REFERRALS
  3:LDAP_OPT_PROTOCOL_VERSION
  1:objBind
  成功:ldap_bind错误
  :搜索结果
  成功:ldap_search错误
  :返回的条目数

1 个答案:

答案 0 :(得分:0)

这不是一个LDAP问题,而是一个PHP问题。

您的陈述是ldap_search() or die()。但是它做了什么:

如果or die()之前的部分为or,则false会导致脚本死亡。但是ldap_search不返回布尔值而是返回资源。由于PHP的动态特性,资源自动转换为false。因此,即使您的搜索返回有用的内容,您始终也会遇到or die() - 部分。

我认为您想要做的事情如下:

$sr = ldap_search($objLDAP, $dn, "sn=*","sn");
if (ldap_errno($objLDAP)) {
    print_r($sr."<br />");
    print_r(ldap_error($objLDAP)."<br />");
}