PHP에서 Curl은 네트워크 요청 처리에 널리 사용되는 매우 강력한 라이브러리입니다. PHP는 효율적인 동시 요청을 달성하기 위해 Curl_multi_* 시리즈 기능을 제공하여 동시에 여러 HTTP 요청을 시작할 수 있습니다. 그중에서도 Curl_multi_Close 는 여러 컬 세션 핸들을 닫는 데 사용되는 기능이지만 부적절하게 사용하면 연결 예외 또는 자원 누출이 발생할 수 있습니다. 이 기사에서는 이러한 문제를 피하기 위해 Curl_Multi_Close를 올바르게 사용하는 방법을 자세히 설명합니다.
PHP에서 CURL_MULTI_* 시리즈 기능은 여러 CURL 세션 핸들의 동시 작업을 관리하는 데 사용됩니다. CURL_MULTI_INIT는 컬 핸들 모음을 초기화하는 데 사용됩니다. CURL_MULTI_ADD_HANDLE은 컬렉션에 단일 컬 핸들을 추가하는 데 사용되며 CURL_MULTI_EXEC는 모든 세션을 실행하는 데 사용되며 응답 결과는 CURL_MULTI_GETCONTENT를 통해 얻을 수 있습니다.
동시 요청이 끝난 후이 세션을 닫는 것이 매우 중요합니다. curl_multi_close는 curl_multi_init 에서 초기화 된 모든 핸들을 자유롭게하는 데 사용됩니다. 그러나 핸들을 닫는 타이밍과 순서가 중요하며 제대로 작동하지 않으면 연결 예외를 유발할 수 있습니다.
Curl_Multi_Close를 사용한 후 연결 예외를 던지지 않으려면 다음 모범 사례를 따라야합니다.
curl_multi_close를 호출하기 전에 먼저 모든 컬 요청이 완료되었는지 확인해야합니다. curl_multi_exec을 통해 모든 요청이 처리되었는지 지속적으로 확인할 수 있습니다.
$multi_handle = curl_multi_init();
$ch1 = curl_init('https://gitbox.net/api/endpoint1');
$ch2 = curl_init('https://gitbox.net/api/endpoint2');
// 핸들을 추가하십시오
curl_multi_add_handle($multi_handle, $ch1);
curl_multi_add_handle($multi_handle, $ch2);
// 요청을 실행하십시오
$running = null;
do {
curl_multi_exec($multi_handle, $running);
} while ($running > 0);
// 결과를 얻으십시오
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// 손잡이를 닫으십시오
curl_multi_remove_handle($multi_handle, $ch1);
curl_multi_remove_handle($multi_handle, $ch2);
// 자원을 자유롭게합니다
curl_multi_close($multi_handle);
위의 코드에서는 Curl_Multi_Exec을 사용하여 모든 요청이 완료되었는지 확인합니다. curl_multi_close는 모든 요청이 완료된 후에 만 여러 컬 세션을 닫으려면 호출됩니다.
curl_multi_close를 호출하기 전에 curl_multi_remove_handle을 통해 모든 컬 핸들을 제거해야합니다. 이러한 핸들이 올바르게 제거되지 않으면 연결 누출 또는 예외가 발생할 수 있습니다.
curl_multi_remove_handle($multi_handle, $ch1);
curl_multi_remove_handle($multi_handle, $ch2);
오류 및 시간 초과는 동시 요청의 일반적인 문제입니다. curl_getInfo 및 curl_errno를 사용하여 각 요청의 상태를 확인하여 연결을 닫기 전에 가능한 모든 오류가 처리되는지 확인할 수 있습니다.
if (curl_errno($ch1)) {
echo 'Error: ' . curl_error($ch1);
} else {
echo 'Response 1: ' . $response1;
}
if (curl_errno($ch2)) {
echo 'Error: ' . curl_error($ch2);
} else {
echo 'Response 2: ' . $response2;
}
Curl_multi_Close 를 올바르게 사용하면 연결 예외를 던지지 않고 PHP 프로그램의 동시 요청을 효율적으로 닫을 수 있습니다. curl_multi_close를 호출하기 전에 :
모든 요청이 완료되었는지 확인하십시오.
모든 핸들을 올바르게 제거하십시오.
요청 처리에 대한 오류 및 시간 초과.
이러한 모범 사례를 따르면 CURL_MULTI_CLOSE가 여러 컬 세션을 폐쇄하여 발생하는 연결 예외를 피하고 프로그램 안정성 및 효율성을 향상시킬 수 있습니다.