현재 위치: > 최신 기사 목록> curl_multi_close를 호출 할 때 여러 다른 반환 값을 처리하는 방법

curl_multi_close를 호출 할 때 여러 다른 반환 값을 처리하는 방법

gitbox 2025-05-12

curl_multi_init ()curl_multi_add_handle () , curl_multi_exec () , curl_multi_getContent ()curl_multi_close ( )와 같은 관련 함수는 PHP에서 여러 동시 CURL 요청을 처리 할 때 매우 실용적입니다. 이 인터페이스 세트는 특히 여러 인터페이스를 요청하거나 많은 양의 웹 페이지 데이터를 크롤링하거나 동시 API 통화 로직을 구축 할 때 성능을 크게 향상시킬 수 있습니다.

그러나 curl_multi_close ()를 호출하기 전에 일반적으로 각 요청에 대한 반환 값을 수집하고 처리해야합니다. 다른 요청은 다른 형식과 상태로 결과를 반환 할 수 있습니다. 이러한 반환 값을 효율적으로 관리하는 방법은 개발자가 직면 해야하는 문제입니다.

이 기사는 성공적인 응답, 실패 정보, HTTP 상태 코드 등을 포함하여 Curl_Multi_Close ()를 호출하기 전에 여러 리턴 값의 처리를 구조화하는 방법을 자세히 설명합니다.

기본 프로세스 검토

 $multiHandle = curl_multi_init();
$curlHandles = [];

$urls = [
    'https://gitbox.net/api/data1',
    'https://gitbox.net/api/data2',
    'https://gitbox.net/api/data3',
];

// 다중 초기화 cURL handle
foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[] = $ch;
}

// 모든 요청을 수행하십시오
$running = null;
do {
    curl_multi_exec($multiHandle, $running);
    curl_multi_select($multiHandle);
} while ($running > 0);

각 요청에 대한 반환 값을 처리하십시오

실행이 완료되면 일반적으로 각 핸들을 가로 지르며 컨텐츠 및 기타 정보를 얻습니다.

 $responses = [];

foreach ($curlHandles as $ch) {
    $content = curl_multi_getcontent($ch);
    $error = curl_error($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    
    $responses[] = [
        'content' => $content,
        'error'   => $error,
        'http_code' => $httpCode,
    ];

    // 싱글을 자유롭게하십시오 handle
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

멀티 핸들을 닫습니다

모든 데이터를 수집 한 후 마지막 단계는 멀티 핸들을 닫는 것입니다.

 curl_multi_close($multiHandle);

샘플 출력 구조

위의 처리를 통해 마침내 잘 구조화 된 $ reses 배열을 얻습니다.

 [
    [
        'content' => '{...}', // JSON또는HTML기다리다
        'error' => '',        // 오류가없는 경우
        'http_code' => 200,
    ],
    [
        'content' => '',
        'error' => 'Could not resolve host: gitbox.net',
        'http_code' => 0,
    ],
    ...
]

이러한 방식으로, 멀티 핸들을 닫기 전에, 각 요청의 응답 값은 형식으로 수집 될 수 있으며, 이는 로깅, 오류 분석, 재 시도 전략 등과 같은 후속 처리에 편리합니다.

모범 사례 권장 사항

  1. 예외 처리 중앙 집중화 : HTTP 5XX Retry, HTTP 4XX 로깅 경고와 같은 각 요청에 대한 처리 정책을 정의합니다.

  2. 데이터 형식 사전 검증 : JSON_DECODE ()를 사용하여 응답 내용이 합법적인지 여부를 결정하십시오.

  3. 응답 매핑 ID : 수백 개의 요청을 처리하려면 해당 응답 소스를 용이하게하기 위해 각 핸들에 대해 사용자 정의 ID (예 : URL 또는 ID)를 설정하는 것이 좋습니다.

  4. curl_multi_select ()를 합리적으로 사용하십시오 : CPU 사용량을 효과적으로 줄이고 Curl_multi_exec의 무제한 폴링을 피할 수 있습니다.

요약

curl_multi_close () 로 리소스를 닫기 전에 각 CURL 핸들에서 필요한 모든 정보를 추출했는지 확인하십시오. 컨텐츠 , 오류http_code 의 구조화 된 모음을 통해 대규모 동시 요청을 효율적으로 관리하고 후속 비즈니스 처리를위한 탄탄한 토대를 마련 할 수 있습니다.

쉽게 재사용 할 수 있도록이 코드를 일반 기능으로 패키지해야합니까?