Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP流套接字客户端-IP地址无效_Php_Ip_Stream Socket Client - Fatal编程技术网

PHP流套接字客户端-IP地址无效

PHP流套接字客户端-IP地址无效,php,ip,stream-socket-client,Php,Ip,Stream Socket Client,我的服务器有多个IP地址,我使用此代码将IP绑定到流套接字客户端。它很好用。但有时我会收到这样的警告: 流\u套接字\u客户端():无效的IP地址: 我使用的是PHP5.3.3,我的服务器运行的是CentOS 5.x $opts = array( 'socket' => array( 'bindto' => '1.1.1.1:0', ), ); // create the context... $context = stream_conte

我的服务器有多个IP地址,我使用此代码将IP绑定到流套接字客户端。它很好用。但有时我会收到这样的警告:

流\u套接字\u客户端():无效的IP地址:

我使用的是PHP5.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);
}

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


如果您正在连接到本地计算机,则IP将是127.0.0.1

1.1.1.1将是我的服务器的公共IP地址。和:0将连接到所有端口。我做得对吗?我不相信OP试图连接到本地机器。据我所知,正在创建一个套接字客户端以连接到外部机器,OP希望将客户端的原始IP地址绑定为其拥有的多个IP中的一个特定IP。您无法连接到所有端口。你需要连接到一个特定的端口。哦,我错了0将允许PHP选择要连接的端口,如此处所示:。对吗?谢谢你。@rdlowrey你知道我的意思:)你只是偶尔收到警告?您的客户机是VPS、共享主机还是专用机箱?另外,您是否确定尝试连接到的
$ip
地址有效且不是错误的原因?是的,仅此警告,它将转到使用fsockopen。我使用的是VPS,不确定在专用服务器上是否发生同样的情况。哦,正如我所说的,IP是正确的,运行良好。但有时PHP会说“无效IP”,并继续使用fsockopen。谢谢。这只是一个猜测,但我怀疑问题在于,
fsockopen
会定期被VPS的多个IP地址弄糊涂,因为您无法使用流上下文将套接字绑定到特定的IP地址。尝试消除
else{
条件(仅使用
stream\u socket\u client
方法)我猜问题会消失。
fsockopen
更容易使用,但它没有提供更高级的上下文选项,如
stream\u socket\u client
…谢谢@rdlowrey。当stream\u socket\u client应用时,发送的电子邮件标题中的IP是正确的。但是当使用fsocketopen时,电子邮件中的IP就消失了到我的VPS主IP。所有使用stream_socket_客户端的脚本都是在shell模式(命令模式)下运行的,您认为这会导致警告消息吗?谢谢!!!