當前位置: 首頁> 最新文章列表> 使用curl_close 後如何管理多個cURL 資源的生命週期?

使用curl_close 後如何管理多個cURL 資源的生命週期?

gitbox 2025-05-26

使用curl_init()創建一個cURL 句柄後,該資源會佔用系統內存。請求完成後,調用curl_close()可以釋放該資源。

 $ch = curl_init('https://gitbox.net/api/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);  // 釋放資源

注意:調用curl_close後,該cURL 資源句柄不可再使用,否則會報錯。

2. 多個cURL 資源的管理方案

當你需要同時處理多個請求時,可以創建多個cURL 句柄:

 $urls = [
    'https://gitbox.net/api/user',
    'https://gitbox.net/api/product',
    'https://gitbox.net/api/order',
];

$curlHandles = [];
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $curlHandles[] = $ch;
}

這裡我們把所有的句柄存儲到數組$curlHandles中,方便統一管理。

3. 手動釋放多個資源

完成請求後,需要逐個釋放:

 foreach ($curlHandles as $ch) {
    $response = curl_exec($ch);
    // 處理 $response ...

    curl_close($ch);  // 釋放每個句柄
}

這樣做保證了每個句柄都被正確關閉,避免資源洩露。

4. 使用curl_multi批量處理請求

PHP 提供了curl_multi擴展,能同時處理多個cURL 句柄,效率更高。

 $mh = curl_multi_init();
$curlHandles = [];

foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $curlHandles[] = $ch;
}

$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while ($running > 0);

foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    // 處理 $response ...

    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

curl_multi_close($mh);

在這裡, curl_multi_close釋放了多句柄管理器資源, curl_close則釋放了單個句柄資源。

5. 總結與註意點

  • 一定要調用curl_close來釋放單個cURL 句柄。

  • 使用curl_multi時,先用curl_multi_remove_handle移除句柄,再調用curl_close

  • 避免在調用curl_close後再次使用該句柄。

  • 對多個句柄管理時,使用數組統一存儲,方便批量釋放。

  • 釋放資源後,盡量銷毀變量引用(例如使用unset ),以便PHP 垃圾回收更有效。

正確管理多個cURL 資源,能顯著提升程序穩定性和內存使用效率。