使用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 資源句柄不可再使用,否則會報錯。
當你需要同時處理多個請求時,可以創建多個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中,方便統一管理。
完成請求後,需要逐個釋放:
foreach ($curlHandles as $ch) {
$response = curl_exec($ch);
// 處理 $response ...
curl_close($ch); // 釋放每個句柄
}
這樣做保證了每個句柄都被正確關閉,避免資源洩露。
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則釋放了單個句柄資源。
一定要調用curl_close來釋放單個cURL 句柄。
使用curl_multi時,先用curl_multi_remove_handle移除句柄,再調用curl_close 。
避免在調用curl_close後再次使用該句柄。
對多個句柄管理時,使用數組統一存儲,方便批量釋放。
釋放資源後,盡量銷毀變量引用(例如使用unset ),以便PHP 垃圾回收更有效。
正確管理多個cURL 資源,能顯著提升程序穩定性和內存使用效率。