2013-05-20 37 views
3

尝试使用URL('ldap:// hostname /')尝试从具有PHP5的Ubuntu服务器连接到LDAP服务器时出现问题。 当我不使用URL格式($server = 'hostname')时,代码正常工作。使用URL的PHP​​ LDAP连接

代码:

$server = 'ldap://hostname/'; 

$ldapconn = ldap_connect($server, 3268) or die("Could not connect to LDAP server."); 

if ($ldapconn) { 
    $ldapbind = @ldap_bind($ldapconn, 'username', 'password'); 
    $error_ldap_code = ldap_errno($ldapconn) ; 
    if($error_ldap_code==0) { 
     echo 'Connected!!!'; 
    } 
} 

编辑:

我需要ldaps,但我看到了与我ldap有同样的问题。虽然与ldap相关的问题是通过在URL中添加端口来解决的,但我仍然遇到了ldaps问题。无论如何,通过仅使用主机名(无URL格式)连接后,我设法绕过ldap_start_tls (resource $link)

+0

你是什么意思*当我不使用URL *的代码工作正常? – Raptor

+0

@shivan:我的意思是它仅在使用主机名时不起作用,不使用URL格式。 – Mihai

回答

2

尝试在URL中指定端口 - 它不是标准端口389.所以'ldap:// hostname:3268'?

+0

它并不能完全解决我的问题,因为我试图使用ldaps(但它仍然无法正常工作),但它正确地回答了我的问题(并且它有效)。 – Mihai

+0

Hmm,LDAPS将位于另一个端口上,因此要么在URL中指定该端口,要么在服务器配置为TLS时 - 通过普通的LDAP URL /端口进行连接,然后发送启动TLS LDAP操作以开始加密。 PHP的文档:http://php.net/manual/en/function.ldap-start-tls.php –

+0

实际上,在你的评论前几​​分钟我用相同的解决方案更新了我的文章,不过谢谢你。 – Mihai

0

除非您使用带SSL的LDAP,否则您不需要在ldap_connect()函数的第1个参数中指定ldap://。因此,ldap_connect('hostname')是正确的。

注意:对于使用SSL的LDAP,您可以使用ldap_connect('ldaps://hostname')

参考:http://php.net/manual/en/function.ldap-connect.php

+0

其实我试图使用ldaps,因此我的问题,但我注意到它不适用于ldap。 – Mihai