我的服务器有多个IP地址,我使用此代码将IP绑定到流套接字客户端。它工作正常。但有些时候,我得到这样的警告:PHP流套接字客户端 - 无效IP地址
stream_socket_client():无效的IP地址:
我使用PHP 5.3.3和我的服务器运行的CentOS 5.x的
$opts = array(
'socket' => array(
'bindto' => '1.1.1.1:0',
),
);
// create the context...
$context = stream_context_create($opts);
$fp = @stream_socket_client ($link, $errno, $errstr, 120, STREAM_CLIENT_CONNECT, $context);
你能告诉我如何避免这个警告。 非常感谢!
UPDATE
码由一个评论如下要求:
if (function_exists('stream_context_create')
&& function_exists('stream_socket_client')
) {
$socket_options = array('socket' => array('bindto' => $ip .':0'));
$socket_context = stream_context_create($socket_options);
$this->smtp_conn = stream_socket_client(
"$host:$port",
$errno,
$errstr,
30,
STREAM_CLIENT_CONNECT,
$socket_context
);
} else {
$this->smtp_conn = @fsockopen($host, $port, $errno, $errstr, $tval);
}
而且您只能间歇性地收到警告?你的客户机是VPS,共享主机还是专用机器?另外,你确定你试图连接的'$ ip'地址是否有效,而不是错误的原因? – rdlowrey
是的,只是这个警告,并转到使用fsockopen。我正在使用VPS,并不确定它是否在专用时发生。哦,正如我所说的,IP是正确的,它运行良好。但有时PHP会说“无效的IP”,并继续使用fsockopen。谢谢。 – Quan
这只是一个猜测*,但我怀疑问题在于'fsockopen'会周期性地被您的VPS的多个IP地址混淆,因为您无法使用流上下文将套接字绑定到特定的IP地址。尝试删除'else {'条件(仅使用'stream_socket_client'方法),我猜测问题会消失。 'fsockopen'更易于使用,但它不提供像'stream_socket_client'这样更高级的上下文选项... – rdlowrey