使用 PHP 连接活动目录或 LDAP
Connect an active directory or LDAP with PHP
我正在尝试将 window 的活动目录或 LDAP 与 PHP 中创建的应用程序 (GLPI) 连接。
连接参数:
正在连接服务器:
$ds = ldap_connect($host, $port) // return true
@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
@ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
@ldap_set_option($ds, LDAP_OPT_DEREF, $deref_options);
将连接与服务器和用户及密码相关联
ldap_bind ($ds, $ login, $ password)
returns我:
"Can not contact LDAP server"
我想知道该错误消息会发生什么,因为在第一种方法中它 returns 对我来说是正确的,这意味着如果它连接到服务器。
RootDN
这很好,并且拥有我正在使用的用户的所有权限。
默认服务器没问题,我做了 ping
和 telnet
。
注意:我已经下载了 LDAPExplorer 并建立了没有问题的连接。
缺失的 : $ds = ldap_connect ...
是否与您的代码中的一样?
它应该是这样的:
$ds = ldap_connect($host, $port);
@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
@ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
@ldap_set_option($ds, LDAP_OPT_DEREF, $deref_options);
ldap_bind ($ds, $login, $password)
ldap_connect
未 连接到服务器,如 docs 中明确说明的那样。它只是创建一个资源并检查给定的值是否合理。实际连接是使用需要连接到服务器的第一个命令建立的。在这种情况下 ldap_bind
.
顺便说一句:"first method" 不是 return true
而是一个资源句柄。只有当你传递一些绝对不可解析的东西时,它才会 return false
。但是从来没有true
我建议使用 LDAP-URI 而不是 $host, $port
变体,因为 PHP-library 必须这样做,否则在内部。这是 f.e 的唯一途径。建立 LDAPS 连接。
好的,我的问题的解决方案是从 GLPI 版本 9.3.0 升级到 9.3.3。
建议:
对于用户来说,这可能会发生什么,请验证 GLPI 通知有关待处理安装包的消息。所以我选择了更新并且连接正常工作。
对于无法更新版本的用户,请确认apache包是pending to install或update,同样在setup的安装过程中,要非常小心安装整个似乎pending的列表。
要通过安装 9.3.3 版本修复一些错误:
chown -R apache: apache glpi / files
chmod -R 755 glpi / files
chown -R apache: apache config
chmod -R 755 glpi / config
还有:
setsebool -P httpd_can_network_connect_db 1
谢谢。
我正在尝试将 window 的活动目录或 LDAP 与 PHP 中创建的应用程序 (GLPI) 连接。
连接参数:
正在连接服务器:
$ds = ldap_connect($host, $port) // return true
@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
@ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
@ldap_set_option($ds, LDAP_OPT_DEREF, $deref_options);
将连接与服务器和用户及密码相关联
ldap_bind ($ds, $ login, $ password)
returns我:
"Can not contact LDAP server"
我想知道该错误消息会发生什么,因为在第一种方法中它 returns 对我来说是正确的,这意味着如果它连接到服务器。
RootDN
这很好,并且拥有我正在使用的用户的所有权限。
默认服务器没问题,我做了 ping
和 telnet
。
注意:我已经下载了 LDAPExplorer 并建立了没有问题的连接。
缺失的 : $ds = ldap_connect ...
是否与您的代码中的一样?
它应该是这样的:
$ds = ldap_connect($host, $port);
@ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
@ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);
@ldap_set_option($ds, LDAP_OPT_DEREF, $deref_options);
ldap_bind ($ds, $login, $password)
ldap_connect
未 连接到服务器,如 docs 中明确说明的那样。它只是创建一个资源并检查给定的值是否合理。实际连接是使用需要连接到服务器的第一个命令建立的。在这种情况下 ldap_bind
.
顺便说一句:"first method" 不是 return true
而是一个资源句柄。只有当你传递一些绝对不可解析的东西时,它才会 return false
。但是从来没有true
我建议使用 LDAP-URI 而不是 $host, $port
变体,因为 PHP-library 必须这样做,否则在内部。这是 f.e 的唯一途径。建立 LDAPS 连接。
好的,我的问题的解决方案是从 GLPI 版本 9.3.0 升级到 9.3.3。
建议:
对于用户来说,这可能会发生什么,请验证 GLPI 通知有关待处理安装包的消息。所以我选择了更新并且连接正常工作。
对于无法更新版本的用户,请确认apache包是pending to install或update,同样在setup的安装过程中,要非常小心安装整个似乎pending的列表。
要通过安装 9.3.3 版本修复一些错误:
chown -R apache: apache glpi / files
chmod -R 755 glpi / files
chown -R apache: apache config
chmod -R 755 glpi / config
还有:
setsebool -P httpd_can_network_connect_db 1
谢谢。