2012-12-18 84 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

您無法連接到所有端口。您需要連接到特定的端口。 –