gpt4 book ai didi

php - ldap_bind() 挂起/卡住

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:47:30 46 4
gpt4 key购买 nike

所以我将我的问题简化为一个简单的 php 脚本

test.php

<?php 
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); //for logging
if($con = ldap_connect( 'ldaps:domain.com', 636 )){
$bind_return = ldap_bind($con, 'username', 'super_secret_password');
}
?>

当我转到 localhost\test.php 时,浏览器指示它正在等待响应,并且会一直卡在那里......永远(更准确地说,直到我停止它,有时一个小时后,但你明白了)。使用 xdebug,我能够将挂起精确定位到 ldap_bind() 调用。当我尝试跨过或进入 ldap_bind() 代码行时,我的 xdebug 挂起并变得没有响应。

ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7); 的记录输出是:

ldap_create
ldap_url_parse_ext(domain.com)
ldap_bind_s
ldap_simple_bind_s
ldap_sasl_bind_s
ldap_sasl_bind
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP domain.com:636
ldap_new_socket: 15
ldap_prepare_socket: 15
ldap_connect_to_host: Trying domain.com:636
ldap_pvt_connect: fd: 15 tm: -1 async: 0

然后就什么都没有了。我不知道该怎么做,而且 Google 也很不友善。

ldap_connect() 成功,返回类似(resource) resource id='2' type='ldap link'max_execution_time 不会中断脚本的执行。如果我在有问题的代码行之前放置类似 while(true){} 的内容,那么 max_execution_time 将触发,我将看到一个错误。所以 ldap_bind() 甚至以某种方式阻止了 php 环境超时。将代码包装在 try/catch block 中并不能减轻挂起。

我试过:

1) 多次重启服务器

2) 重新安装 php5、php-ldap、libapache2-mod-php5 和 apache2

3)搜索互联网

有趣的是 ldap_bind() 几周前运行良好,它在我的生产站点上仍然运行良好,但我已经尝试解决这个问题很长一段时间了我差点点燃我的电脑。感谢您的帮助。

更新:

所以我安装了 ldap-utils 并运行了 ldapsearch -H ldaps://domain.com,它挂了。我使用调试选项 ldapsearch -d 1 -H ldaps://domain.com 运行它,输出为:

ldap_url_parse_ext(ldaps://domain.com/)
ldap_create
ldap_url_parse_ext(ldaps://domain.com:636/??base)
ldap_pvt_sasl_getmech
ldap_search
put_filter: "(objectclass=*)"
put_filter: simple
put_simple_filter: "objectclass=*"
ldap_send_initial_request
ldap_new_connection 1 1 0
ldap_int_open_connection
ldap_connect_to_host: TCP domain.com:636
ldap_new_socket: 3
ldap_prepare_socket: 3
ldap_connect_to_host: Trying domain.com:636
ldap_pvt_connect: fd: 3 tm: -1 async: 0
^^^^It hangs right here^^^^

看起来很熟悉,不是吗?在整个命令上运行 strace 会产生很长的跟踪但此时挂起

write(3, "\26\3\0\0p\1\0\0l\3\3T\254/\31\24\200\25 \247\221\7\251\240\271\35\"\272\203V \305"..., 117) = 117
read(3,

同样,它卡在这里,光标只是在“read(3,

之后闪烁

我遇到了 this bug report使用 openldap 这与我自己的问题出奇地相同,直到 strace 卡在 read 命令上。然而,似乎没有关于解决方案的讨论,因为 openldap 将矛头指向 gnuTLS。

最佳答案

听起来像是环保的东西。这可能是防火墙更改、网络路由更改、SSL 证书过期、LDAP 服务器更改等。

我会在 ISO 堆栈上执行一系列诊断协议(protocol)。

首先通过 telnet 连接到远程服务器上的端口 636。如果可行,请下载 openldap 并试一试。看看你是否可以手动连接它。如果可行,请在生产环境中运行您的调试版本(从命令行)并查看 ldap_pvt_connect 之后的下一步是什么。另外,试试命令行版本,你对事物的控制更有限,而且你没有网络服务器。

关于php - ldap_bind() 挂起/卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27791024/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com