Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 ldap_search()和CLI ldapsearch返回不同的结果_Ldap_Ldap Query - Fatal编程技术网

PHP ldap_search()和CLI ldapsearch返回不同的结果

PHP ldap_search()和CLI ldapsearch返回不同的结果,ldap,ldap-query,Ldap,Ldap Query,在命令行上运行ldapsearch命令时,它会返回大量的结果,而通过PHP执行的等效(或者我认为是这样)查询不会返回任何结果 ldapsearch命令: ldapsearch -Zx -H ldap://directory.host.ca -D [CREDENTIALS] -w [PASSWORD] -z 0 -l 0 - LLL -b "ou=people,dc=business,dc=ca" "(&(facultyCode=AU)(term="1380")" uid PHP搜索:

在命令行上运行ldapsearch命令时,它会返回大量的结果,而通过PHP执行的等效(或者我认为是这样)查询不会返回任何结果

ldapsearch命令:

ldapsearch -Zx -H ldap://directory.host.ca -D [CREDENTIALS] -w [PASSWORD] -z 0 -l 0 - LLL -b "ou=people,dc=business,dc=ca" "(&(facultyCode=AU)(term="1380")" uid
PHP搜索:

//已使用CLI命令中使用的相同凭据进行绑定
$filter='(&(facultyCode=AU)(term=“1380”));
$list=ldap_search($conn,'ou=people,dc=business,dc=ca',$filter,array('uid'),0,0,0);

我遗漏了什么?

检查服务器日志以确定搜索请求中传输了什么。在这两个示例中,过滤器可能不是等效的。例如,PHP可能会将
字符转换为
(单引号转换为双引号)。在编码过滤器中,
是不等价的

此外,使用
ldapsearch
的shell示例不会编码
term=“1380”
,而是编码
term=1380
,这与
term=“1380”
不同。换句话说,ldapsearch命令是(某些shell可能以不同方式转义引号字符串):


我没有访问服务器日志的权限,但我会处理这些引用&看看是否可以让它们匹配。谢谢。单引号、双引号、无引号-CLI命令始终有效。单引号、双引号、双引号编码为\22-始终通过PHP返回0个结果。删除引号超时。
term
属性值是否有双引号、编码或其他形式?“term”没有引号。它以4位数字的形式存在:1380。“术语”实际上是一个对象,而不是一个属性。我正在查询组织的中央目录服务,他们就是这样设置的。我有另一个人试图找到如何正确构建查询,所以在此期间,我只是想让我的PHP代码与CLI命令执行相同的操作。在PHP过滤器中,双引号作为属性值的一部分传递给directory server。使用
$filter='(&(facultyCode=AU)(term=1380))
ldapsearch -Zx -H ldap://directory.host.ca \
   -D [CREDENTIALS] -w [PASSWORD] -z 0 -l 0 \
   -LLL -b "ou=people,dc=business,dc=ca" \
   '(&(facultyCode=AU)(term=1380)' uid