PHP에서 Curl은 HTTP 요청을 보내고 응답을받는 데 도움이되는 강력한 라이브러리입니다. curl_multi_* 함수 세트, 특히 curl_multi_close를 사용하면 여러 컬 요청이 동시에 처리 될 수 있습니다. 여러 컬 핸들에서 작업을 완료하면 Curl_Multi_Close를 사용하여 핸들을 닫는 것이 중요한 단계입니다. 그러나 관련 리소스를 올바르게 해제하지 않으면 메모리 누출 및 오류가 발생할 수 있습니다.
이 기사는 Curl_Multi_Close 함수를 사용한 후 리소스를 올바르게 해제하는 방법을 소개하여 메모리 누출 및 오류를 피할 수 있습니다.
PHP에서 Curl_multi_* 함수를 사용하면 여러 CURL 요청을 동시에 처리 할 수 있습니다. Curl_multi_init 은 여러 컬 핸들을 초기화하는 데 사용되며 Curl_multi_add_handle은 각 개별 컬 핸들을 여러 컬 핸들에 추가하는 데 사용되며 Curl_multi_exec은 모든 요청을 수행하는 데 사용됩니다. 모든 요청이 완료되면 Curl_multi_Close를 사용하여 이러한 핸들을 닫습니다.
샘플 코드 :
$multiCurl = curl_multi_init();
$curlHandles = [];
for ($i = 0; $i < 3; $i++) {
$curlHandles[$i] = curl_init("https://gitbox.net/api/data?id=$i");
curl_setopt($curlHandles[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiCurl, $curlHandles[$i]);
}
$running = null;
do {
curl_multi_exec($multiCurl, $running);
} while ($running);
foreach ($curlHandles as $ch) {
$response = curl_multi_getcontent($ch);
echo $response . "\n";
}
// 모든 핸들을 닫습니다
curl_multi_close($multiCurl);
curl_multi_close를 사용한 후 여러 컬 핸들을 닫지 만 개별 컬 핸들은 명시 적으로 해제 될 때까지 유지됩니다. 이 핸들을 해제하지 않으면 메모리가 계속해서 메모리 누출이 발생할 수 있습니다.
리소스가 올바르게 출시되도록하려면 여러 개의 컬 핸들을 닫은 후 Curl_Close를 명시 적으로 호출해야합니다.
// 각각을 닫습니다 cURL 핸들
foreach ($curlHandles as $ch) {
curl_close($ch);
}
이렇게하면 Curl_Multi_Close 이후 메모리 누출을 피하기 위해 각 컬 핸들도 올바르게 해제 될 수 있습니다.
여러 컬 요청을 실행하는 동안 오류가 발생할 수 있습니다. 이러한 오류를 처리 할 때 오류가 발생할 때 컬 핸들이 올바르게 닫히도록하는 것이 중요합니다. 오류가 발생하더라도 마지막에 항상 자원을 정리해야합니다.
오류 처리 코드 예 :
$multiCurl = curl_multi_init();
$curlHandles = [];
for ($i = 0; $i < 3; $i++) {
$curlHandles[$i] = curl_init("https://gitbox.net/api/data?id=$i");
curl_setopt($curlHandles[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiCurl, $curlHandles[$i]);
}
$running = null;
do {
$execReturn = curl_multi_exec($multiCurl, $running);
if ($execReturn !== CURLM_OK) {
echo "Error occurred while executing multi requests.\n";
break;
}
} while ($running);
foreach ($curlHandles as $ch) {
if (curl_errno($ch)) {
echo "cURL error: " . curl_error($ch) . "\n";
} else {
$response = curl_multi_getcontent($ch);
echo $response . "\n";
}
curl_close($ch);
}
curl_multi_close($multiCurl);
이 코드는 오류가 발생하더라도 모든 컬 핸들이 해제되어 리소스 누출을 피합니다.
curl_multi_close를 사용한 후에는 curl_close를 사용하여 각 컬 핸들을 별도로 닫는 것을 잊지 마십시오.
오류가 발생하면 모든 리소스가 여전히 제거되어 있는지 확인하고 메모리 누출을 피하십시오.
curl_multi_close는 여러 개의 컬 핸들 만 닫을 수 있지만 별도의 컬 핸들을 자동으로 닫을 수는 없습니다. 수동으로 청소해야합니다.
이러한 모범 사례에 따라 메모리 누출과 오류를 피하고 프로그램을보다 효율적이고 안정적으로 만들 수 있습니다.