忽略php fsockopen超时

忽略php fsockopen超时,php,sockets,Php,Sockets,我使用PHP函数fsockopen进行http(s)调用。 我可以使用$timeout参数5秒来完成此函数 $_socket_timeout = 5; $_fp = @fsockopen ($_server, $_port, $_errno, $_errstr, $_socket_timeout); 此代码用于连接到多个服务器,除了一个主机外,它工作正常。 对于该主机,将忽略超时。这一行可能需要30、50秒或更长的时间来执行。有时它很快。 我的脚本执行超时为60秒,因此,有时由于执行超时,脚本

我使用PHP函数fsockopen进行http(s)调用。 我可以使用$timeout参数5秒来完成此函数

$_socket_timeout = 5;
$_fp = @fsockopen ($_server, $_port, $_errno, $_errstr, $_socket_timeout);
此代码用于连接到多个服务器,除了一个主机外,它工作正常。 对于该主机,将忽略超时。这一行可能需要30、50秒或更长的时间来执行。有时它很快。 我的脚本执行超时为60秒,因此,有时由于执行超时,脚本完成时此行出现致命错误。 我从未使用过此函数返回null和错误代码“连接超时”

原因可能是什么?为什么会忽略超时? 有没有人遇到过这样的问题? 如何解决

更新 我确信我的密码在这个地方很有用。我将代码修改为

$_socket_timeout = 5;
$stime = time();
$_fp = @fsockopen ($_server, $_port, $_errno, $_errstr, $_socket_timeout);
logToFile(time()-$stime);
更新2 我检查了这个问题是否是DNS问题。事实并非如此。我把代码改成了

$_socket_timeout = 5;
$stime = time();
$ip = gethostbyname($_server);
logToFile('IP resolve '.time()-$stime);
$_fp = @fsockopen ($ip, $_port, $_errno, $_errstr, $_socket_timeout);
logToFile('connection time '.time()-$stime);

IP解析工作得很好。但连接有时会延长5秒。

您是通过主机名还是IP指定该主机?如果您通过主机名指定它,我将检查主机名为的DNS响应时间。而且它与ssl类似ssl://hostname.comI 考虑了DNS问题。但是当我检查gethostbyname时,该主机的gethostbyname函数始终运行良好。您能连续重现该问题吗?还是只是偶尔发生?不,我不能不断重复这个问题。它偶尔发生。在过去的三天里,这一切都没有发生