PHP - ldap_bind错误要求参数 1 是资源,给定布尔值



我想使用 php 的基本函数做一个 ldap serach。 我对 ldap 连接返回的资源有问题(函数 ldap_connect())。它似乎工作正常,但是当涉及到ldap绑定时,我收到此警告:

警告:ldap_bind():无法绑定到服务器:无法联系 LDAP 服务器在..

然后ldap_error()返回以下警告:

警告:ldap_error() 期望参数 1 是资源,布尔值 在..

我做了一个var_dump来查看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 returnedn";
        // close connection
        ldap_unbind($bind);
    } else {
        echo "LDAP bind failed...n";
    }
}
ldap_close($ds);

我使用命令行在SSH终端中执行我的代码。我得到以下结果:

[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 ~]$

我不明白为什么在绑定之后,我有一个布尔值而不是 ldap 资源链接 ( resource(8) of type (ldap link) )。有人可以帮助我找到问题吗?

谢谢。。

它看起来像一个无效的证书错误。 即使发生错误,ldap_connect()也将始终返回资源。

关于文件;

ldap_connect()将始终返回资源,因为它实际上并不连接,而只是初始化连接参数。实际连接发生在下一次调用ldap_*函数时,通常带有ldap_bind().

如果您使用的是无效的证书,则可以强制接受它配置

/etc/openldap/ldap.conf

TLS_REQCERT allowTLS_REQCERT never指令。

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

作为提示,您可以通过向脚本添加ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);LDAP_OPT_DEBUG_LEVEL设置为7以查看连接的更多详细信息。

最新更新