PHP에서 Curl은 REST API에 액세스하거나 크롤링 웹 페이지와 같은 네트워크 요청을 수행하기위한 강력한 라이브러리입니다. 단일 CURL 요청을 처리 할 때 Curl_Init ()를 사용하여 핸들을 초기화하는 것이 표준 프로세스입니다. Curl_Exec ()는 요청을 실행하고 마지막으로 Curl_Close () 를 통해 리소스를 해제합니다. 그러나 여러 동시 요청을 처리 할 때 특히 Curl_Multi_* 시리즈 기능을 사용할 때 자원을 올바르게 닫고 깨끗하게하는 것이 특히 중요합니다. 그렇게하지 않으면 메모리 누출 또는 네트워크 연결 문제가 발생할 수 있습니다.
단일 요청에서 일반적인 코드는 다음과 같습니다.
$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_close ($ ch)가 필요합니다. curl_init () 에 의해 생성 된 컬 핸들을 닫고 관련 리소스를 해방시킵니다.
여러 요청이 동시에 여러 요청을 시작 해야하는 시나리오의 경우 PHP는 CURL_MULTI_* 인터페이스를 제공합니다. 예는 다음과 같습니다.
$urls = [
'https://gitbox.net/api/one',
'https://gitbox.net/api/two',
'https://gitbox.net/api/three',
];
$multiHandle = curl_multi_init();
$curlHandles = [];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $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) {
$responses[] = curl_multi_getcontent($ch);
}
현재 다음 단계를 실행하지 않으면 Curl_multi_Remove_handle 및 Curl_Close를 실행하지 않으면 리소스가 해제되지 않습니다.
모든 요청이 실행되고 응답이 검색되면 각 핸들을 청소해야합니다.
foreach ($curlHandles as $ch) {
curl_multi_remove_handle($multiHandle, $ch); // ~에서 multi handle 제거
curl_close($ch); // 싱글을 닫으십시오 cURL 핸들,리소스를 자유롭게합니다
}
curl_multi_close($multiHandle); // 마지막으로 multi handle
이것은 모든 자원이 릴리스되도록하는 중요한 단계입니다. curl_close ()를 하나씩 호출하지 않고 curl_multi_close ()를 끄는 것만으로는 충분하지 않습니다.
항상 명시 적으로 릴리스 : 단일 또는 여러 요청이든 항상 Curl_Close ()를 사용해야합니다.
시도 또는 오류 처리를 사용하십시오 : 처리 중에 예외가있을 수 있습니다. 핸들이 최종적으로 해제되는지 확인하기 위해 Try-Finally 구조를 사용하는 것이 좋습니다.
모니터 메모리 및 연결 수 : 동시성 높은 환경에서 미공개 컬 핸들은 빠르게 자원 소진으로 이어질 수 있습니다.
캡슐화 요청 로직 : 누락을 피하기 위해 내부적으로 리소스 릴리스를 처리하기 위해 함수 또는 클래스로 캡슐화하는 것이 좋습니다.
Curl_Close ()는 PHP, 특히 여러 요청 시나리오에서 선택 사항이 아닙니다. curl_multi_remove_handle () 및 curl_close () 의 올바른 사용은 시스템 안정성과 성능을 보장 할 수 있습니다. 요청 로직을 작성한 후에는이 단계를 잊지 마십시오. 자원을 정리하는 것이 최상의 성능 최적화입니다.