curl_multi_setopt

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

curl_multi_setopt设置 cURL 并行选项

说明

curl_multi_setopt(CurlMultiHandle $multi_handle, int $option, mixed $value): bool

为给定的 cURL 并行句柄设置选项。

参数

multi_handle

curl_multi_init() 返回的 cURL 多个句柄。

option

常量 CURLMOPT_* 之一。

value

将要设置给 option 的值。

option 参数为下列值时 value 需要为 int 类型:

选项 设置 value
CURLMOPT_PIPELINING 传递 1 启用或传递 0 禁用。在多句柄上启用管道将使其尝试对使用此句柄的传输尽可能执行 HTTP 管道操作。这意味着如果添加的第二个请求可以使用已有连接,则第二个请求将在同一连接上使用“管道”。自 cURL 7.43.0 起,该值是位掩码,如果可能,传递 2 将尝试在现有的 HTTP/2 连接上多路复用新传输。传递 3 指示 cURL 请求彼此独立的管道和多路复用。自 cURL 7.62.0 起,设置管道 bit 没有效果。除了整数文字,还可以使用 CURLPIPE_* 常量(如果可用)。
CURLMOPT_MAXCONNECTS 传递数字,该数字将用作 libcurl 可以缓存的同时打开的最大连接数。默认情况下,数量将放大为适应 curl_multi_add_handle() 添加的句柄数量的四倍。当缓存已满时,curl 会关闭缓存中最早的一个,以防止打开的连接数增加。
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 传递数字,用于指定用于管道处理的块长度阈值(以字节为单位)。
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 传递数字,指定用于管道惩罚(pipelining penalty)的长度阈值(以字节为单位)。
CURLMOPT_MAX_CONCURRENT_STREAMS 设置的数字将用作 cURL 在使用 HTTP/2 连接中应支持的最大并发流数量。有效值范围是从 121474836472^31 - 1)。这里设置的值将根据其他系统资源属性来确定是否执行。默认值是 100
CURLMOPT_MAX_HOST_CONNECTIONS 传递一个数字,指定连接单个主机的最大数量。
CURLMOPT_MAX_PIPELINE_LENGTH 传递数字,指定管道中的最大请求数。
CURLMOPT_MAX_TOTAL_CONNECTIONS 传递数字,指定同时打开连接的最大数量。
CURLMOPT_PUSHFUNCTION

传递 callable 以注册处理服务器推送且应具有以下签名:

pushfunction(resource $parent_ch, resource $pushed_ch, array $headers): int
parent_ch

父级 cURL 句柄(客户端发出的请求)。

pushed_ch

推送请求的新 cURL 句柄。

headers

推送 promise header。

推送函数如果可以处理推送应该返回 CURL_PUSH_OK,或者返回 CURL_PUSH_DENY 拒绝。

返回值

成功时返回 true, 或者在失败时返回 false

更新日志

版本 说明
8.2.0 引入 CURLMOPT_MAX_CONCURRENT_STREAMS
8.0.0 multi_handle expects a CurlMultiHandle instance now; previously, a resource was expected.
7.1.0 引入 CURLMOPT_PUSHFUNCTION
7.0.7 引入 CURLMOPT_CHUNK_LENGTH_PENALTY_SIZECURLMOPT_CONTENT_LENGTH_PENALTY_SIZECURLMOPT_MAX_HOST_CONNECTIONSCURLMOPT_MAX_PIPELINE_LENGTHCURLMOPT_MAX_TOTAL_CONNECTIONS

add a note

User Contributed Notes 1 note

up
0
ryosuke_i_628 at yahoo dot co dot jp
8 years ago
If you want to enable both HTTP/1.1 pipelining and HTTP/2 multiplexing...

<?php
curl_multi_setopt
($mh, CURLMOPT_PIPELINING, 3);
?>

or

<?php
curl_multi_setopt
($mh, CURLMOPT_PIPELINING, CURLPIPE_HTTP1 | CURLPIPE_MULTIPLEX);
?>
To Top