【问题标题】:PHP stream socket client - invalid IP addressPHP流套接字客户端 - 无效的IP地址
【发布时间】:2012-12-19 01:28:07
【问题描述】:

我的服务器有多个 IP 地址,我使用此代码将 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);

你能告诉我如何避免这个警告吗? 非常感谢!!!


更新

以下评论要求的代码:

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 地址是有效的,而不是错误的原因吗?
  • 是的,就是那个警告,它使用 fsockopen。我正在使用 VPS,但不确定它是否在专用服务器上发生了同样的情况。哦,正如我所说,IP 是正确的,并且运行良好。但有时 PHP 会说“无效 IP”并继续使用 fsockopen。谢谢。
  • 这只是一个猜测,但我怀疑问题是fsockopen 会定期被您的 VPS 的多个 IP 地址弄糊涂,因为您不能使用流上下文来将套接字绑定到特定的 IP 地址。尝试消除else { 条件(仅使用stream_socket_client 方法),我的猜测是问题会消失。 fsockopen 更易于使用,但它没有提供更高级的上下文选项,例如 stream_socket_client ...
  • 感谢@rdlowrey。应用 stream_socket_client 时,发送的电子邮件标头中的 IP 是正确的。但是当使用 fsocketopen 时,电子邮件中的 IP 转到了我的 VPS 主 IP。所有使用 stream_socket_client 的脚本都是在 shell 模式(命令模式)下运行的,你认为这会导致警告消息吗?谢谢!!!

标签: php ip stream-socket-client


【解决方案1】:

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

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

【讨论】:

  • 1.1.1.1 将是我服务器的公共 IP 地址。并且 :0 将连接到所有端口。我做得对吗?
  • 我不相信 OP 正在尝试连接到本地计算机。据我了解,正在创建一个套接字客户端以连接到外部机器,并且 OP 希望将客户端的原始 IP 地址绑定为其拥有的多个 IP 中的一个特定 IP。
  • 您无法连接到所有端口。您需要连接到特定端口。
  • 哦,我的错。 :0 将让 PHP 选择要连接的端口,如下所示:php.net/manual/en/context.socket.php。那是对的吗?谢谢。
  • @rdlowrey 你知道我的意思 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2016-01-01
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多