PHP-ldap_绑定错误期望参数1是给定的资源布尔值

PHP-ldap_绑定错误期望参数1是给定的资源布尔值,php,ldap,Php,Ldap,我想用php的基本函数来做一个ldap serach。ldap连接返回的资源有问题(函数ldap\u connect())。它似乎工作正常,但在ldap绑定方面,我收到了以下警告: 警告:ldap_bind():无法绑定到服务器:无法联系ldap 服务器位于 然后ldap\u error()返回以下警告: 警告:ldap_error()要求参数1为资源,布尔值 给出 我做了一个var_转储来查看ldap_connect返回的值。以下是完整的代码: <? php $host = "ldaps

我想用php的基本函数来做一个ldap serach。ldap连接返回的资源有问题(函数
ldap\u connect()
)。它似乎工作正常,但在ldap绑定方面,我收到了以下警告:

警告:ldap_bind():无法绑定到服务器:无法联系ldap 服务器位于

然后
ldap\u error()
返回以下警告:

警告:ldap_error()要求参数1为资源,布尔值 给出

我做了一个var_转储来查看ldap_connect返回的值。以下是完整的代码:

<? php
$host = "ldaps://valid.host.name.fr";
$port = 636;
$username = 'uid=HEDE45,ou=Applis,dc=ldapannuaire';
$password = 'mdp1234';
$baseDn = 'dc=ldapannuaire';
$person = 'JACKSON';
$filter="(sn=$person*)";

$connectStr = $host.":".$port;

echo "Connecting ...\n";
$ds = ldap_connect($connectStr);

ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version');
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0) or die('Unable to set LDAP referrals'); // We need this for doing an LDAP search.

if ($ds) { 
    echo "Binding ...\n";
    var_dump($ds);
    $bind = ldap_bind($ds, $username, $password);
    ldap_error($bind);
    if ($bind) {
        echo "LDAP bind successful...\n";
        $search = ldap_search($ds, $baseDn, $filter) or exit("Unable to search LDAP server, response was: " . ldap_error($search));
        // Search users 
        $info = ldap_get_entries($ds, $search);
        echo $info["count"]." entries returned\n";
        // close connection
        ldap_unbind($bind);
    } else {
        echo "LDAP bind failed...\n";
    }
}
ldap_close($ds);
我不明白为什么在绑定之后,我有一个布尔值而不是ldap资源链接(
resource(8),类型为(ldap链接)
)。有人能帮我找到问题吗


谢谢..

这看起来像是一个无效的证书错误
ldap\u connect()
将始终返回资源,即使发生错误

关于文件

ldap\u connect()
将始终返回资源,因为它实际上没有连接,只是初始化连接参数。实际的连接发生在对
ldap\u*
funcs的下一次调用中,通常是使用
ldap\u bind()。

如果您使用的是非有效证书,您可以强制接受它

/etc/openldap/ldap.conf

TLS\u请求证书允许
TLS\u REQCERT从不
指令

如果您没有修改conf文件的权限,只需通过
putenv('LDAPTLS_REQCERT=allow')在脚本开头设置环境变量即可
putenv('LDAPTLS_REQCERT=never')


作为提示,您可以将
LDAP\u OPT\u DEBUG\u LEVEL
设置为
7
,通过添加
LDAP\u set\u选项(NULL,LDAP\u OPT\u DEBUG\u LEVEL,7)查看连接的更多详细信息到脚本。

如果语法检查失败,则返回FALSE。这里会是这样吗?将此添加到您的ldap_connect以了解它是否工作:或是否死亡(“无法连接到$connectStr”);如果使用两个参数(主机和端口)而不是使用完整的LDAP URI进行连接,会发生什么情况?e、 g.
$ds=ldap\u connect('valid.host.name.fr',636)我在ldap\u连接后得到“成功”作为响应。谢谢你的警告,这是一个复制过去的错误@Rathanaikit做同样的事情,我也试过了。谢谢@EricLavault我是否错过了配置?您是否尝试使用
ldap\u search
通过CLI执行此查询?我不允许更改
ldap.conf
文件。我添加了
putenv('LDAPTLS_REQCERT=allow')现在就可以了。我将在我的开发环境中使用它。我不确定我是否有跳过认证的权限。谢谢你的帮助。
[webadmin@myserverfaraway~]$ /software/apache/apa_2.2.24/php-5.3.23/bin/php -c /myproject/apache_2.2.24/php_5.3.23/conf/php.ini  /myproject/apache_2.2.24/htdocs/chrons/searchPeople.php
Connecting ...
Binding ...
resource(8) of type (ldap link)

Warning: ldap_bind(): Unable to bind to server: Can't contact LDAP server in /myproject/apache_2.2.24/htdocs/chrons/searchPeople.php on line 21

Warning: ldap_error() expects parameter 1 to be resource, boolean given in /myproject/apache_2.2.24/htdocs/chrons/searchPeople.php  on line 22
LDAP bind failed...
[webadmin@myserverfaraway ~]$