현재 위치: > 최신 기사 목록> PHP의 CURL_CLOSE 및 CURL_SETOPT에 대한 성능 최적화 팁

PHP의 CURL_CLOSE 및 CURL_SETOPT에 대한 성능 최적화 팁

gitbox 2025-05-18

CURL은 HTTP 요청에 PHP를 사용할 때 가장 일반적으로 사용되는 확장자 중 하나입니다. 강력하고 다양한 프로토콜을 지원하지만 사용 중에 많은 잠재적 오해도 있습니다. 특히 curl_close ()curl_setopt () 의 사용과 관련하여 많은 개발자들이 성능에 미치는 영향을 인식하지 못합니다. 이 기사는 이러한 일반적인 오해를 심층적으로 분석하고 최적화 제안을 제공합니다.

1. 일반적인 오해 분석

1. 각 요청에 대해 컬 리소스를 생성하고 닫습니다

이것은 가장 일반적인 오해입니다. 많은 개발자가 각 요청을 호출하는 데 사용됩니다.

 $ch = curl_init();
// 다양한 옵션을 설정합니다
curl_setopt($ch, CURLOPT_URL, 'https://gitbox.net/api/data');
$response = curl_exec($ch);
curl_close($ch);

이러한 방식으로 작성된 코드는 명확하고 직관적이지만 성능 문제를 무시합니다. 빈번한 curl_init ()curl_close () 는 자주 할당과 자원의 재활용으로 이어지고 시스템 오버 헤드가 증가합니다.

최적화 제안 : 짧은 시간에 여러 요청을 전송 해야하는 경우 동일한 컬 핸들을 재사용하고 필요한 매개 변수 만 수정하는 것이 좋습니다.

 $ch = curl_init();

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

foreach ($urls as $url) {
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    // 거래하십시오 $response
}

curl_close($ch);

2. 필요한 매개 변수를 재설정하는 대신 Curl_Reset에 대한 과도한 의존

일부 개발자는 핸들을 재사용 할 때마다 Curl_Reset ($ CH)을 호출하여 안전한 연습이라고 생각합니다. 실제로 CURL_RESET은 모든 설정을 지우며, 이는 다시 이리치 화에 해당하며 필요한 매개 변수를 수동으로 설정하는 것만 큼 효율적이지 않습니다.

제안 : 모든 옵션을 재설정하지 않고 Curlopt_url , Curlopt_postfields 와 같이 변경 될 옵션 만 업데이트하십시오.

3. 잘못된 리소스 릴리스로 인한 메모리 누출

일부 코드는 Curl_Close ()를 Miss Miss에 기반으로합니다. 특히 예외가 발생하면 마지막 으로 핸들이 닫히지 않으므로 장기 작업 후에 메모리 누출이 발생합니다.

제안 : 사용 후에는 항상 리소스가 릴리스되도록하십시오. 다음 구조가 권장됩니다.

 $ch = curl_init();

try {
    curl_setopt($ch, CURLOPT_URL, 'https://gitbox.net/api/user');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    // 거래하십시오 $response
} finally {
    curl_close($ch);
}

4. 동시 요청에서 핸들을 잘못 사용합니다

Curl_multi_*를 사용하여 동시 요청을 수행 할 때 개발자는 때때로 작업 실행 전이나 작업 실행 중에 손잡이를 닫아 요청이 실패하게됩니다.

올바른 방법 : 모든 하위 요약이 완료되었는지 확인한 다음 Curl_Close ()를 호출하십시오.

 $mh = curl_multi_init();
$chs = [];

$urls = [
    'https://gitbox.net/api/a',
    'https://gitbox.net/api/b',
];

foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $chs[] = $ch;
}

do {
    $status = curl_multi_exec($mh, $active);
    curl_multi_select($mh);
} while ($active && $status == CURLM_OK);

foreach ($chs as $ch) {
    $response = curl_multi_getcontent($ch);
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

curl_multi_close($mh);

2. CURL_SETOPT의 성능 최적화 기술

1. 연결 멀티플렉싱을 합리적으로 사용하십시오

PHP의 컬은 연결 재사용 (연결 재사용)을 지원하지만 서버 측에서 Keep-Alive를 지원해야하며 활성화해야합니다.

 curl_setopt($ch, CURLOPT_FORBID_REUSE, false);

Curlopt_TCP_Keepalive 관련 설정을 활성화하여 긴 연결 서비스에서 성능을 최적화 할 수도 있습니다.

2. 불필요한 설정을 피하십시오

일부 옵션이 기본적으로 필요한 동작 인 경우 매번 명시 적으로 설정할 필요가 없습니다. 예를 들어:

 // 설정할 필요가 없습니다 false,이것은 기본이기 때문입니다
curl_setopt($ch, CURLOPT_HEADER, false);

불필요한 CURL_SETOPT 호출을 줄이면 스크립트 실행 효율성을 향상시키는 데 도움이됩니다.

3. DNS 해상도를 최적화하십시오

DNS 쿼리는 HTTP 요청의 성능 병목 현상 중 하나입니다. 사용자 정의 구문 분석을 설정하거나 캐시 메커니즘을 사용하여 최적화 할 수 있습니다.

 curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 300);

또는 지역 구문 분석 설정 :

 curl_setopt($ch, CURLOPT_RESOLVE, ['api.gitbox.net:443:192.168.0.1']);

4. http2 이상 사용 (예 : http3)

최신 서버의 지원을 통해 HTTP2를 활성화하면 동시성이 높아지고 요청 응답 속도가 빠릅니다.

 curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);

3. 결론

Curl_Close ()는 단순한 리소스 릴리스 기능 인 것 같습니다. 그러나 Curl_SetOpt () 와 함께 사용하면 프로그램의 성능과 안정성에 직접적인 영향을 미칩니다. 우수한 사용 습관을 개발하면 메모리 누출을 피할뿐만 아니라 요청 효율성을 크게 향상시킬 수 있습니다. 동시 동시 시나리오의 경우 합리적인 재사용 핸들, 설정 간소화 및 연결 수명주기 관리는 PHP CURL 튜닝의 키입니다.