強制使用 IPv6 的正確方法是 'bindto' => '[::]:0'
Socket 上下文選項 — Socket 上下文選項列表
Socket 上下文選項適用於所有透過 Socket 運作的包裝器,例如 tcp
、http
和 ftp
。
版本 | 說明 |
---|---|
7.1.0 | 新增 tcp_nodelay 。 |
7.0.1 | 新增 ipv6_v6only 。 |
範例 #1 基本 bindto
使用範例
<?php
// 使用 '192.168.0.100' IP 連線到網際網路
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:0',
),
);
// 使用 '192.168.0.100' IP 和埠號 '7000' 連線到網際網路
$opts = array(
'socket' => array(
'bindto' => '192.168.0.100:7000',
),
);
// 使用 '2001:db8::1' IPv6 位址和埠號 '7000' 連線到網際網路
$opts = array(
'socket' => array(
'bindto' => '[2001:db8::1]:7000',
),
);
// 使用埠號 '7000' 連線到網際網路
$opts = array(
'socket' => array(
'bindto' => '0:7000',
),
);
// 建立上下文...
$context = stream_context_create($opts);
// ...並使用它來擷取資料
echo file_get_contents('http://www.example.com', false, $context);
?>
您可以將「bindto」設定為「0:0」來強制使用 IPv4 而不是 IPv6。也可能可以設定為「[0]:0」來強制使用 IPv6,但我還沒測試過。