2012-12-18 54 views
1

我的服务器有多个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); 
} 
+0

而且您只能间歇性地收到警告?你的客户机是VPS,共享主机还是专用机器?另外,你确定你试图连接的'$ ip'地址是否有效,而不是错误的原因? – rdlowrey

+0

是的,只是这个警告,并转到使用fsockopen。我正在使用VPS,并不确定它是否在专用时发生。哦,正如我所说的,IP是正确的,它运行良好。但有时PHP会说“无效的IP”,并继续使用fsockopen。谢谢。 – Quan

+0

这只是一个猜测*,但我怀疑问题在于'fsockopen'会周期性地被您的VPS的多个IP地址混淆,因为您无法使用流上下文将套接字绑定到特定的IP地址。尝试删除'else {'条件(仅使用'stream_socket_client'方法),我猜测问题会消失。 'fsockopen'更易于使用,但它不提供像'stream_socket_client'这样更高级的上下文选项... – rdlowrey

回答

0

这是一个无效的IP地址......你还需要一个正确的端口。

如果要连接到本地计算机,IP将为127.0.0.1

+0

1.1.1.1将是我服务器的公共IP地址。并且:0将连接到所有端口。我做对了吗? – Quan

+0

我不相信OP正试图连接到本地计算机。我的理解是,套接字客户端正在被创建以连接到外部机器,并且OP想要将客户端的原始IP地址绑定为它拥有的多个IP中的一个特定IP。 – rdlowrey

+1

您无法连接到所有端口。您需要连接到特定的端口。 –