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);
위의 코드에서는 요청을 보낼 때마다 컬 세션을 초기화하고 닫습니다. 단일 요청에는 적합하지만 자주 세션 초기화 및 종료는 많은 요청을 보내야 할 때 성능에 영향을 줄 수 있습니다.
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 () 를 실행합니다.
코드 효율성을 향상시키기 위해 긴 연결된 컬 세션을 사용할 수 있습니다. 이 접근법에서는 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 () 를 통해 동적으로 수정되었습니다. 이 방법은 반복 세션 초기화 및 폐쇄를 피하고 코드 효율성을 향상시킵니다.
많은 요청을 보내야하는 경우 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_* 함수를 사용하면 매번 컬 세션을 초기화하고 닫지 않고도 여러 요청을 동시에 보낼 수 있습니다. 이를 통해 효율성을 향상시킬뿐만 아니라 여러 요청을 동시에 처리 할 수있어 대기 시간이 크게 줄어 듭니다.
각 요청에서 curl_init () 및 curl_close () 를 호출하지 않고 긴 연결 또는 배치 요청을 대신 사용하여 코드의 실행 효율을 효과적으로 향상시킬 수 있습니다. 특히 많은 수의 요청이 필요한 경우 Curl_multi_* 함수를 사용하면 전체 프로세스 속도를 높이고 자원 소비를 줄일 수 있습니다.
이러한 방법을 사용하면 CURL을 사용하여 HTTP 요청을 보낼 때 성능을 크게 최적화하고 효율적인 PHP 프로그래밍을위한 탄탄한 기반을 마련 할 수 있습니다.