繁体   English   中英

“无法打开插座”

[英]“Could not open socket”

如何缓解我网站上发生的“无法打开套接字”错误?

我有麻烦,它是CAPTCHA (我正在使用reCAPTCHA )。 它只在我使用reCAPTCHA的两个页面上显示此错误。

我一直在生成新的密钥集,有时它可以工作,有时则不然。 例如,它适用于Safari ,有时不适用于Firefox ,反之亦然,它适用于我,而不适用于我的合作伙伴之一,反之亦然。

我该如何解决这个问题? 可能是我的服务器在执行fsocketopen命令时遇到了麻烦吗? 如果是这样,我该如何解决?

可能是我的服务器在执行fsocketopen命令时遇到了麻烦吗?

确切地说 - 虽然它并不一定意味着你的服务器出了问题。 它只是意味着在服务器和recaptcha服务器之间的某处,存在阻止打开套接字连接的网络通信问题。

这可能是很多事情。 它可能是您的代码或服务器上的配置问题(特别是如果您的服务器上的配置的某些方面是动态的),它可能是您的服务器具有的连接级别的问题,它可能是网络配置托管您的服务器的问题,它可能是您的服务器和recaptcha服务器之间的任何地方的网络配置问题,它可能是托管的带宽问题,它可能是他们一方的配置问题。 您可能希望使用fsockopen的额外错误报告参数来查看是否可以获取任何有意义的消息。 您也可以尝试在完全不同的网络上至少2-3个不同的服务器上进行设置 - 这也可以为您提供有关问题所在位置的具体指示。

另一个问题是,你将如何管理这类事情。 fsockopen有时候无法获得连接,因为即使是配置最好的网络环境,也没有通信保证。 硬件失败,事故发生,网络管理员有胖手指的时刻,远程服务器混淆,全球热核战争可以取出数据中心 - 你永远不会知道。 因此,您必须编写代码(并管理您的设置),这样您就可以获得故障发生时的后备情况,并显示最终用户可接受的错误消息。

您可能希望查看PHP的set_error_handler函数并设置一个函数,以便在fsockopen失败的情况下调用。 在某些情况下,我喜欢用它来触发异常,如下所示:

function throw_error_exception($number = 0, $str = '',$file = null,$line = null) {
   throw new ErrorException($str, 0, $number, $file, $line);
}

set_error_handler('throw_error_exception',E_ALL);

使用该设置,您可以管理fsockopen连接,如下所示:

try {
   fsockopen('remote.host.com',8080,$fso_errnum,$fso_errstr,30);
} catch(Exception $e) {
   // here you can look at properties/methods of $e, and $fso_* values, and 
   // figure out what nice error messages you want to display for your users
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM