【发布时间】:2026-01-17 08:05:02
【问题描述】:
我正在使用 Google Recaptcha 库 (https://github.com/google/recaptcha) 来确认表单提交。这几个月来一直运行良好。突然间,我开始注意到很多错误,例如:
ErrorException: file_get_contents(): Failed to enable crypto in /vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php:68
(从 \ReCaptcha\ReCaptcha::verify 调用) 这个异常可以通过一个简单的请求(在库之外)间歇性地复制:
file_get_contents('https://www.google.com/recaptcha/api/siteverify');
当它出错时,大约需要 52 秒超时才会显示错误,否则立即成功。不知道这个超时值是从哪里来的。较早的帖子表明此错误与 SSL3 有关(它不是 - 显然 Google 没有使用它,它使用 TLS 1.2)。我也尝试过使用最新的 cacerts.pem 文件(来自 curl),但问题仍然存在。
使用 curl(来自 PHP 或 cli)拉取该 URL 也没有问题。
服务器在 Ubuntu 14.04 上运行 PHP 7.1.3。我确实没有在我的本地机器上遇到这个问题,在 Ubuntu 16.10 上运行相同的 PHP,所以我想知道这是否有某种关联。我在这里真的很茫然。我知道我可以分叉库并重写它以使用 curl 而不是 file_get_contents,但这似乎充其量是一种解决方法。
【问题讨论】:
-
今天我遇到了完全相同的问题(尽管是 PHP 5)。你找到解决方案了吗?
-
@MrCarrot,尝试在您的
php.ini中设置default_socket_timeout=360看看是否有帮助 -
你的服务器的操作系统是什么?有可能是网络问题吗?也许这是相关的? *.com/questions/26148701/…
-
一开始,您可以设置超时并重试(例如 3 次): 正确设置超时而不会弄乱 ini 值:` 数组(“超时”=> 1))); file_get_contents("example.com", 0, $ctx); ?>`
-
启动 tcpdump 并记录网络通信。可能是您有防火墙干扰,达到了 Google 施加的某些限制等。