在PHP 中,curl_multi_init() 函數用於初始化一個能夠同時處理多個cURL 請求的會話。通過該函數,我們可以創建一個新的curl_multi 句柄,並返回一個資源句柄。使用該會話句柄,我們可以向會話中添加多個cURL 請求句柄,從而實現並行處理多個URL 的功能。
resource curl_multi_init(void);
如果成功,curl_multi_init() 返回一個會話句柄;如果失敗,則返回FALSE 。
以下是一個簡單的示例,展示瞭如何通過curl_multi_init() 函數來初始化一個多個cURL 的會話,並同時發送多個請求:
<?php
// 初始化會話
$mh = curl_multi_init();
// 創建 URL 列表
$urls = array(
'http://www.example.com/url1',
'http://www.example.com/url2',
);
// 創建 cURL 句柄並添加到會話
$handles = array();
foreach ($urls as $url) {
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch);
$handles[] = $ch;
}
// 執行會話中的 cURL 句柄
$active = null;
do {
$result = curl_multi_exec($mh, $active);
} while ($result == CURLM_CALL_MULTI_PERFORM || $active);
// 處理結果
foreach ($handles as $handle) {
$response = curl_multi_getcontent($handle);
// 處理響應數據
echo $response;
// 移除句柄並關閉 cURL
curl_multi_remove_handle($mh, $handle);
curl_close($handle);
}
// 關閉會話
curl_multi_close($mh);
?>
以上代碼首先通過curl_multi_init()初始化一個新的cURL 會話。接下來,定義一個URL 列表,並通過循環遍歷該列表,利用curl_init()為每個URL 創建一個cURL 請求句柄,並將其添加到會話中。
然後,通過curl_multi_exec()執行會話中的所有cURL 請求。在請求完成後,通過curl_multi_getcontent()獲取每個請求的響應數據,並進一步處理。最後,使用curl_multi_remove_handle()移除句柄,並通過curl_close()關閉每個cURL 請求,最終通過curl_multi_close()關閉整個會話。
通過使用curl_multi_init()函數,PHP 程序可以同時處理多個cURL 請求,從而提高執行效率,特別是在需要同時進行多個API 請求或批量下載數據時非常有用。
掌握curl_multi_init()函數及其相關函數的使用,不僅能幫助你提升PHP 的網絡請求處理能力,還能加深你對並行請求和性能優化的理解。
相關標籤:
cURL