현재 위치: > 최신 기사 목록> curl_multi_close를 사용하여 자원 누출을 방지하는 방법

curl_multi_close를 사용하여 자원 누출을 방지하는 방법

gitbox 2025-05-12

높은 동시성 및 비동기 처리 시나리오에서 PHP의 Curl_multi 시리즈 기능은 매우 일반적으로 사용됩니다. 그러나 많은 개발자들은 사용 중에 자원 릴리스 문제를 무시하여 메모리 누출 또는 파일 핸들 누출이 발생하여 시스템 안정성 문제가 발생합니다. 이 기사는 Curl_Multi_Close 기능을 통해 PHP의 자원 누출을 올바르게 방지하는 방법을 자세히 설명합니다.

PHP에서 Curl_multi_* 일련의 함수를 사용하면 여러 컬 세션을 동시에 처리 할 수있어 네트워크 요청의 효율성을 크게 향상시킬 수 있습니다. 그러나 동시성 수가 증가함에 따라 리소스가 올바르게 닫히지 않으면 메모리 축적 또는 파일 디스크립터 소진을 일으키기가 매우 쉽습니다. 이는 궁극적으로 프로그램 충돌 또는 서버 응답이 느려집니다.

1. curl_multi_close 란 무엇입니까?

curl_multi_close ()는 curl_multi_init () 에 의해 생성 된 멀티 컬러 핸들을 닫는 데 사용됩니다. 멀티 핸들에 추가 된 단일 컬 핸들을 자동으로 닫지 않습니다 . 즉 , curl_multi_add_handle () 을 통해 추가 된 각 컬 세션을 수동으로 닫아야합니다.

curl_multi_close () 만 조항 핸들을 공개하지 않고 호출되는 경우, 자원은 여전히 ​​PHP 내부에서 유지되어 누출이 발생합니다.

2. 올바른 자원 관리 프로세스

누출을 완전히 방지하려면 올바른 리소스 관리 프로세스는 다음과 같습니다.

  1. curl_init ()를 사용하여 단일 요청을 만듭니다.

  2. curl_multi_init ()를 사용하여 멀티 핸들을 만듭니다.

  3. 멀티 핸들에 단일 요청을 추가합니다.

  4. 상태를 실행하고 듣습니다.

  5. 각 개별 요청 핸들을 제거하고 닫습니다.

  6. 멀티 핸들을 닫습니다.

3. 샘플 코드

다음은 완전하고 표준화 된 예입니다. 도메인 이름은 gitbox.net 으로 대체되었습니다.

 <?php
// 다중 별도를 초기화하십시오 cURL 세션
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/v1/resource1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/v1/resource2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

// 생성 cURL multi handle
$mh = curl_multi_init();

// 두 개의 별도 핸들을 추가하십시오 multi handle
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// 구현하다 multi handle
do {
    $status = curl_multi_exec($mh, $active);
    if ($active) {
        // 활성 연결을 기다리고 있습니다
        curl_multi_select($mh);
    }
} while ($active && $status == CURLM_OK);

// 콘텐츠를 얻으십시오
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

// 중요한 단계:손잡이를 제거하고 닫습니다
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);

curl_close($ch1);
curl_close($ch2);

// 마지막으로 multi handle
curl_multi_close($mh);

// 반환 데이터를 인쇄하십시오
echo $response1;
echo $response2;
?>

4. 요약

  • 클론 핸들 ( curl_multi_remove_handle )을 먼저 제거한 다음 각각 닫아야 합니다 ( curl_close ).

  • 마지막으로 Curl_multi_Close를 호출하여 멀티 핸들 자체의 자원을 해제하십시오.

  • 단계를 무시하면 자원 누출, 특히 높은 동시성 환경에서 문제가 빠르게 증폭 될 수 있습니다.

CURL_MULTI_CLOSE 및 관련 리소스 관리를 올바르게 사용하면 PHP 프로그램이보다 안정적이고 효율적으로 운영 될 수 있습니다.