我的服務器有多個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