关于这个问题网上有很多资料,但是或多或少都存在一些问题。下面讲一下我的方法并加了几个我碰到的花了大量时间才解决的问题。
环境Linux + PHP + Apache
1、php要能够连接上ldap服务器,必须安装php-ldap模块,并修改php.ini配置,增加配置项extension=ldap.so,之后重启apache服务器。
2、连接LDAP服务器
- $hostname="example.com";
- $port = 389;
- $username_linux = "cn=Manager,dc=example,dc=com"; // Linux下管理员用户名的格式
- $username_windows = "example@example.com"; // Windows下管理员用户名的格式
- // 或者$username_windows = "example";
- $password = "secret";
- $basedn = "dc=example,dc=com";
-
- if( $port )
- {
- $ds=ldap_connect($hostname,$port);
- }
- else
- {
- $ds=ldap_connect($hostname);
- }
-
- if( $ds )
- {
- ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION,3);
- ldap_set_option($ds, LDAP_OPT_REFERRALS,0);
-
- $r=ldap_bind($ds,$username_linux,$password);
- $sr=ldap_search($ds, $basedn,"(objectClass=*)");
- echo "Number of entires returned is " . ldap_count_entries($ds, $sr) . "<br />";
- $info = ldap_get_entries($ds, $sr);
- var_dump($info);
- ldap_close($ds);
- }
- else
- {
- echo "<h4>Unable to connect to LDAP server</h4>";
- }
复制代码
注意:
1、LDAP服务器在Linux(OpenLDAP)和Windows(Active Directory)下绑定用户名和密码时用户名的格式是不一样的。
2、Warning: ldap_bind() [function.ldap-bind]: Unable to bind to server: Invalid credentials用户名或者密码不正确。
3、连接windows活动目录时,所使用的账号必须对域具有管理权限,否则即便能绑定成功,在调用ldap_search()查找数据时也会出现Warning: ldap_search() [function.ldap-search]: Search: Operations error 的错误。(这个问题我在实现的时候花了很长时间才找到问题产生的原因)