这是我的代码:
$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错误
:返回的条目数
答案 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 />");
}