【发布时间】:2019-12-02 00:08:41
【问题描述】:
在工作的生产服务器上,在某个时间点(6 月 24 日 13:18),fsockopen 开始无缘无故地失败。
$sock = fsockopen("ssl://mail.dupcheck.org",993, $errno, $errstr, 300);
- 它返回:$sock = false, errno = 0, errstr = "" 很快。
- 它会打开其他服务器。
重要的是,
- 它在 linux Web 服务器和 Windows (WAMP) 开发服务器上都不起作用
- MS Outlook 和其他邮件客户端完美连接到此服务器并获取邮件。
- 那天(6 月 24 日)我们的 GoDaddy SSL 证书出现了一些问题 - 它开始显示不正确的日期!我们当时打电话给 GoDaddy 的支持,他们说问题已解决。
- 从那时起,差不多一个月,有时 fsockopen 工作,我们收到电子邮件,没有人注意,没有人检查特定的邮件发送日志......直到今天它达到了 300M!
====
PHP 7.3.3-1,ubuntu16.04.1
是的,我阅读了手册,在 Google 上搜索了几个小时,但没有任何缓解。没有人知道那是什么,包括系统管理员。
【问题讨论】:
-
也许详细说明“它开始显示不正确的日期”......这是怎么发生的?假设问题不在服务器端,那么“改变了什么”这句老话很有用。 OpenSSL 的变化? CA Bundle 已过期(缺少更改)?与
fsockopen通话相关的日志中没有警告?问题是间歇性的? -
tls.imirhil.fr/tls/mail.dupcheck.org:993 似乎没有表现出什么特别之处。您应该增加日志记录,并尝试在 PHP 之外同时重现该问题。就目前而言,您的问题与编程无关,因此Super User 或Server Fault 可能是更好的场所。
-
请参阅 stackoverflow.com/help/on-topic 仅使用
fsockopen并不自动意味着您的问题符合此处描述的 4 个项目符号中的任何一个。 -
“我就是不能再增加日志” 为什么?当问题发生时,您是否使用
openssl s_client或任何其他 TLS 客户端来重现它?你能嗅探网络并查看交换了什么吗?您是否尝试过其他主机的相同代码?另一个 PHP/OpenSSL 版本?等等。 -
也来自文档:“如果 errno 中返回的值为 0 并且函数返回 FALSE,则表明错误发生在 connect() 调用之前。这很可能是由于问题初始化套接字。”这意味着它根本不是 TLS 问题。也许您遇到了 DNS 解析问题,或者您的程序在任何给定时间可以打开的套接字数量受到了一些限制。这应该写在一些日志文件的某个地方,如果它们足够详细的话。