현재 위치: > 최신 기사 목록> curl_close를 사용할 때 컬 세션의 반복적 인 개방 및 닫기를 피하는 방법?

curl_close를 사용할 때 컬 세션의 반복적 인 개방 및 닫기를 피하는 방법?

gitbox 2025-05-18

Curl은 URL 요청을위한 PHP의 강력한 도구입니다. CURL을 사용하면 다른 서버와 통신하고, GET을 수행하고, 요청 게시, 파일 다운로드, 양식 데이터 제출 등을 할 수 있습니다. CURL은 세션 (세션)을 사용하여 요청 된 연결 및 리소스를 관리합니다. 일반적으로 우리는 curl_init () 를 통해 세션을 초기화하고 curl_close () 를 통해 닫습니다.

 $ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

위의 코드에서는 요청을 보낼 때마다 컬 세션을 초기화하고 닫습니다. 단일 요청에는 적합하지만 자주 세션 초기화 및 종료는 많은 요청을 보내야 할 때 성능에 영향을 줄 수 있습니다.

2. 문제의 근본 : 자주 열고 닫는 컬 세션

curl_init ()가 호출 될 때마다 PHP는 새로운 메모리를 할당하고 관련 리소스를 초기화합니다. 그리고 curl_close ()가 호출 될 때마다 이러한 리소스가 릴리스됩니다. 이러한 운영의 빈번한 실행은 특히 여러 요청, 특히 높은 동시성 환경에서 반복 된 초기화와 종료가 시스템의 부담을 증가시킬 수있는 높은 동시성 환경에서 특히 비효율적 일 수 있습니다.

 // 세션을 여러 번 초기화하고 닫습니다
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
$response1 = curl_exec($ch1);
curl_close($ch1);

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
$response2 = curl_exec($ch2);
curl_close($ch2);

위의 코드는 여러 요청을 처리 할 때 시간과 메모리를 낭비하는 각 요청 사이에 curl_init ()curl_close () 를 실행합니다.

3. 컬 세션의 반복적 인 개방 및 폐쇄를 피하는 방법은 무엇입니까?

코드 효율성을 향상시키기 위해 긴 연결된 컬 세션을 사용할 수 있습니다. 이 접근법에서는 CURL 세션을 한 번만 초기화 한 다음 Curl_SetOpt () 를 통해 요청 된 URL 및 기타 매개 변수를 매번 재시성하지 않고 동적으로 변경하면됩니다.

컬 리소스를 루프에 보관하고 각 요청 전에 URL 및 기타 옵션 만 업데이트 할 수 있습니다. 이 메소드는 Curl_Init ()Curl_Close () 에 대한 호출 수를 크게 줄여 효율성을 향상시킵니다.

 $ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 첫 번째 요청
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
$response1 = curl_exec($ch);

// 두 번째 요청
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
$response2 = curl_exec($ch);

curl_close($ch);

위의 코드에서는 Curl_Init ()Curl_Close ()를 한 번만 호출했으며 URL은 CURL_SETOPT () 를 통해 동적으로 수정되었습니다. 이 방법은 반복 세션 초기화 및 폐쇄를 피하고 코드 효율성을 향상시킵니다.

4. 컬을 사용한 벌크 요청

많은 요청을 보내야하는 경우 PHP의 Curl_multi_* 함수는 동시에 여러 요청을 보내서 효율성을 향상시키는 데 도움이 될 수 있습니다. Curl_multi_init () 는 여러 컬 리소스를 초기화 할 수 있으므로 별도의 컬 세션을 자주 열고 닫지 않고 여러 요청을 병렬로 보낼 수 있습니다.

 // 초기화 cURL 배치 세션
$mh = curl_multi_init();

// 다중 생성 cURL 세션
$ch1 = curl_init("https://gitbox.net/api/endpoint1");
$ch2 = curl_init("https://gitbox.net/api/endpoint2");

curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

// 将세션添加到배치 세션中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

// 배치 요청을 수행하십시오
do {
    $status = curl_multi_exec($mh, $active);
} while ($status == CURLM_CALL_MULTI_PERFORM || $active);

// 응답을 받으십시오
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

// 폐쇄 cURL 세션
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

curl_multi_* 함수를 사용하면 매번 컬 세션을 초기화하고 닫지 않고도 여러 요청을 동시에 보낼 수 있습니다. 이를 통해 효율성을 향상시킬뿐만 아니라 여러 요청을 동시에 처리 할 수있어 대기 시간이 크게 줄어 듭니다.

5. 요약

각 요청에서 curl_init ()curl_close () 를 호출하지 않고 긴 연결 또는 배치 요청을 대신 사용하여 코드의 실행 효율을 효과적으로 향상시킬 수 있습니다. 특히 많은 수의 요청이 필요한 경우 Curl_multi_* 함수를 사용하면 전체 프로세스 속도를 높이고 자원 소비를 줄일 수 있습니다.

이러한 방법을 사용하면 CURL을 사용하여 HTTP 요청을 보낼 때 성능을 크게 최적화하고 효율적인 PHP 프로그래밍을위한 탄탄한 기반을 마련 할 수 있습니다.