PHP Conference Japan 2024

curl_multi_init

(PHP 5, PHP 7, PHP 8)

curl_multi_init返回一個新的 cURL 多重控制碼

說明

curl_multi_init(): CurlMultiHandle

允許多個 cURL 控制碼非同步處理。

參數

此函式沒有參數。

傳回值

返回一個 cURL 多重控制碼。

更新日誌

版本 說明
8.0.0 成功時,此函式現在返回一個 CurlMultiHandle 實例;先前返回的是 資源

參見

新增註記

使用者貢獻的註記 3 則註記

w_haigh at yahoo dot com
9 年前
以下是一個更容易理解的範例,來自:http://arguments.callee.info/2010/02/21/multiple-curl-requests-with-php/

// 建立個別請求,但不執行它們
$ch_1 = curl_init('http://webservice.one.com/');
$ch_2 = curl_init('http://webservice.two.com/');
curl_setopt($ch_1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch_2, CURLOPT_RETURNTRANSFER, true);

// 建立多重 curl 句柄,加入 $ch_1 和 $ch_2
$mh = curl_multi_init();
curl_multi_add_handle($mh, $ch_1);
curl_multi_add_handle($mh, $ch_2);

// 同時執行所有查詢,並在全部完成後繼續
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running);

// 關閉句柄
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

// 我們所有的請求都已完成,現在可以存取結果
$response_1 = curl_multi_getcontent($ch_1);
$response_2 = curl_multi_getcontent($ch_2);
echo "$response_1 $response_2"; // 輸出結果
xxavalanchexx at gmail dot com
10 年前
根據 https://bugs.php.net/bug.php?id=61141:

在使用 libcurl 7.24 或更高版本(似乎對應於 PHP 5.3.10 或更高版本)的 Windows 設定上,您可能會發現 curl_multi_select() 總是返回 -1,導致文件中範例程式碼逾時。顯然,這並非嚴格意義上的錯誤:根據 libcurl 文件,如果 curl_multi_select 返回 -1,您應該自行新增 sleep。

因此,為了在 PHP 5.3.10+ 的 Windows 上正常運作,範例程式碼中的第二個迴圈應該如下所示

<?php
while ($active && $mrc == CURLM_OK) {
if (
curl_multi_select($mh) == -1) {
usleep(100);
}
do {
$mrc = curl_multi_exec($mh, $active);
} while (
$mrc == CURLM_CALL_MULTI_PERFORM);
}
?>
Adam Richardson
6 年前
此頁面上第一個範例中使用的其中一個 URL (lxr.php.net) 現在會產生代理錯誤。

如果您正在使用第一個腳本範例,請將其替換為其他 URL。
To Top