Curl을 사용할 때는 먼저 컬 세션을 만들고 Curl_Init ()를 사용하여 컬 핸들을 초기화해야합니다. 이 핸들은 요청 프로세스 중에 연결 관련 정보를 보유합니다. 요청이 완료되면 일반적으로 Curl_Close ()를 사용하여 핸들을 닫고 시스템 리소스를 제거합니다.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data"); // 요청을 설정하십시오 URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 리턴 결과를 문자열로 설정하십시오
$response = curl_exec($ch); // 요청을 실행하고 응답을받습니다
curl_close($ch); // 세션을 닫으십시오
위의 코드에서는 요청이 시작될 때마다 새 컬 세션이 생성되며 요청이 완료된 후 Curl_Close ()가 호출됩니다. 각 컬 세션은 일정량의 리소스를 차지하기 때문에 필요합니다. Curl_Close ()는 이러한 리소스를 자유롭게하는 데 사용될 수 있습니다.
실제 개발에는 여러 요청을 실행 해야하는 시나리오가있을 수 있습니다. 각 요청이 완료된 직후 Curl_Close () 가 호출되면 시스템 리소스를 낭비하여 매번 연결이 반복적으로 닫히게됩니다. 이를 피하기 위해 일반적으로 컬어 세션을 멀티 플렉스하는 방법입니다. 세션을 균일하게 닫기 전에 모든 요청이 완료 될 때까지 여러 요청간에 세션 핸들을 공유하는 방법입니다.
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 리턴 결과를 문자열로 설정하십시오
// 묻다 1
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
$response1 = curl_exec($ch);
// 묻다 2
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
$response2 = curl_exec($ch);
// 묻다 3
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/endpoint3");
$response3 = curl_exec($ch);
curl_close($ch); // 一次性세션을 닫으십시오
이 예에서는 모든 요청이 CURL 세션 핸들 $ ch 를 공유하고 Curl_Close ()는 모든 요청이 완료된 후에 만 호출됩니다. 이것은 세션의 반복적 인 창조와 파괴를 피하여 불필요한 자원 오버 헤드가 줄어 듭니다.
여러 요청을 동시에 시작 해야하는 경우 Curl_multi_* 함수를 사용하여 여러 컬 세션을 병렬로 처리하는 것이보다 효율적인 방법입니다. 이러한 방식으로 Curl_Close () 에 대한 여러 호출을 피하고 여러 요청 된 리소스를 더 잘 관리 할 수 있습니다.
$mh = curl_multi_init(); // 여러 핸들을 초기화합니다
$ch1 = curl_init();
$ch2 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/endpoint1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/endpoint2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch1); // 여러 핸들에 핸들을 추가하십시오
curl_multi_add_handle($mh, $ch2);
do {
curl_multi_exec($mh, $active); // 执行묻다
} while ($active > 0);
$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);
curl_multi_close($mh); // 여러 핸들을 닫습니다
이 접근법에서는 Curl_multi_* 함수를 통해 여러 컬 세션이 병렬로 실행됩니다. 요청 된 각 자원은 완료 후 한 번만 닫히므로 프로그램의 실행 효율성을 향상시키고 각 요청 된 리소스가 올바르게 릴리스되도록합니다.
Curl_Close ()를 올바르게 사용하면 자원 누출을 피할 수 있지만 CURL 요청을 실행할 때 요청 실패에도 불구하고 요청이 발생할 수도 있습니다. 오류가 발생하면 각 요청에 따라 리소스가 올바르게 제거되도록하는 것이 중요합니다. curl_errno ()를 확인하여 요청이 성공했는지 확인할 수 있습니다. 실패하면 해당 오류 처리가 수행됩니다.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/invalid-endpoint");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if(curl_errno($ch)) {
// 묻다失败时的处理
echo "cURL Error: " . curl_error($ch);
} else {
// 묻다成功时的处理
echo "Response: " . $response;
}
curl_close($ch); // 即使묻다失败,또한 자원의 방출을 보장합니다
Curl_Close () 함수를 올바르게 사용하면 CURL 세션이 차지하는 리소스를 효과적으로 방출하고 반복적 인 통화로 인한 성능 문제를 피할 수 있습니다. 여러 요청간에 동일한 세션을 공유하거나 병렬 처리에 Curl_Multi_* 함수를 사용하면 CURL_CLOSE ()에 대한 여러 호출 빈도가 줄어서 프로그램 실행 효율성 및 리소스 관리가 향상 될 수 있습니다. 또한 오류 처리 및 리소스 릴리스도 마찬가지로 중요하므로 메모리 누출 또는 기타 문제를 피하고 각 요청마다 리소스가 제대로 해제되도록합니다.