PHP Conference Japan 2024

Socket 上下文選項

Socket 上下文選項Socket 上下文選項列表

說明

Socket 上下文選項適用於所有透過 Socket 運作的包裝器,例如 tcphttpftp

選項

bindto

用於指定 PHP 將用於存取網路的 IP 位址(IPv4 或 IPv6)和/或連接埠號。語法為 IPv4 位址的 ip:port,以及 IPv6 位址的 [ip]:port。將 IP 或連接埠設定為 0 將讓系統選擇 IP 和/或連接埠。

注意:

由於 FTP 在正常操作期間會建立兩個 Socket 連線,因此無法使用此選項指定連接埠號。

backlog

用於限制 Socket 監聽佇列中未完成連線的數量。

注意:

這僅適用於 stream_socket_server()

ipv6_v6only

覆寫作業系統關於將 IPv4 對應到 IPv6 的預設設定。

注意:

當存在 `[::]` 綁定時,若要分別監聽 IPv4 位址,這一點尤其重要。

這僅適用於 stream_socket_server()

so_reuseport

允許多個綁定到同一個 IP:埠配對,即使來自不同的行程。

注意:

這僅適用於 stream_socket_server()

so_broadcast

啟用向廣播位址發送和接收資料。

注意:

這僅適用於 stream_socket_server()

tcp_nodelay

將此選項設定為 **true** 將會適當地設定 `SOL_TCP,NO_DELAY=1`,從而停用 TCP Nagle 演算法。

更新日誌

版本 說明
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);

?>

新增註釋

使用者貢獻的註釋 2 則註釋

mix at ater dot me
5 年前
強制使用 IPv6 的正確方法是 'bindto' => '[::]:0'
guru at jnt-finland dot fi
9 年前
您可以將「bindto」設定為「0:0」來強制使用 IPv4 而不是 IPv6。也可能可以設定為「[0]:0」來強制使用 IPv6,但我還沒測試過。
To Top