현재 위치: > 최신 기사 목록> curl_multi_close 후 자원을 올바르게 해제하는 방법

curl_multi_close 후 자원을 올바르게 해제하는 방법

gitbox 2025-05-12

PHP에서 Curl은 HTTP 요청을 보내고 응답을받는 데 도움이되는 강력한 라이브러리입니다. curl_multi_* 함수 세트, 특히 curl_multi_close를 사용하면 여러 컬 요청이 동시에 처리 될 수 있습니다. 여러 컬 핸들에서 작업을 완료하면 Curl_Multi_Close를 사용하여 핸들을 닫는 것이 중요한 단계입니다. 그러나 관련 리소스를 올바르게 해제하지 않으면 메모리 누출 및 오류가 발생할 수 있습니다.

이 기사는 Curl_Multi_Close 함수를 사용한 후 리소스를 올바르게 해제하는 방법을 소개하여 메모리 누출 및 오류를 피할 수 있습니다.

1. CURL 다중 요청 처리 개요

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);

2. curl_multi_close를 사용한 후 자원을 올바르게 릴리스하십시오

curl_multi_close를 사용한 후 여러 컬 핸들을 닫지 만 개별 컬 핸들은 명시 적으로 해제 될 때까지 유지됩니다. 이 핸들을 해제하지 않으면 메모리가 계속해서 메모리 누출이 발생할 수 있습니다.

리소스가 올바르게 출시되도록하려면 여러 개의 컬 핸들을 닫은 후 Curl_Close를 명시 적으로 호출해야합니다.

 // 각각을 닫습니다 cURL 핸들
foreach ($curlHandles as $ch) {
    curl_close($ch);
}

이렇게하면 Curl_Multi_Close 이후 메모리 누출을 피하기 위해 각 컬 핸들도 올바르게 해제 될 수 있습니다.

3. 오류 처리 및 리소스 릴리스

여러 컬 요청을 실행하는 동안 오류가 발생할 수 있습니다. 이러한 오류를 처리 할 때 오류가 발생할 때 컬 핸들이 올바르게 닫히도록하는 것이 중요합니다. 오류가 발생하더라도 마지막에 항상 자원을 정리해야합니다.

오류 처리 코드 예 :

 $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);

이 코드는 오류가 발생하더라도 모든 컬 핸들이 해제되어 리소스 누출을 피합니다.

4. 요약

  1. curl_multi_close를 사용한 후에는 curl_close를 사용하여 각 컬 핸들을 별도로 닫는 것을 잊지 마십시오.

  2. 오류가 발생하면 모든 리소스가 여전히 제거되어 있는지 확인하고 메모리 누출을 피하십시오.

  3. curl_multi_close는 여러 개의 컬 핸들 만 닫을 수 있지만 별도의 컬 핸들을 자동으로 닫을 수는 없습니다. 수동으로 청소해야합니다.

이러한 모범 사례에 따라 메모리 누출과 오류를 피하고 프로그램을보다 효율적이고 안정적으로 만들 수 있습니다.