php fsockopen超时被忽略

时间:2015-01-02 12:50:48

标签: php sockets

我使用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秒。

0 个答案:

没有答案