네트워크 요청에 대해 PHP에서 CURL (클라이언트 URL 라이브러리)을 사용하는 일반적인 방법입니다. CURL은 페이지 컨텐츠를 크롤링하라는 GET 요청을 보내거나 게시물 요청을 통해 데이터를 제출하든, 풍부하고 유연한 기능 인터페이스를 제공합니다. 이러한 기능을 사용할 때는 연결 리소스를 적시에 닫고 정리하는 것이 프로그램 성능 및 안정성을 보장하는 핵심 링크입니다. 이 기사는 요청이 완료된 후 핸들을 올바르게 닫고 Curl_Close 기능을 사용하여 리소스를 제거하는 방법에 중점을 둘 것입니다.
Curl은 HTTP, HTTPS, FTP 및 기타 프로토콜 용 PHP 스크립트의 서버와 상호 작용하는 강력한 도구입니다. CURL 세션을 초기화하고 다양한 옵션을 설정하고 요청을 실행하며 반환 결과를 얻음으로써 개발자는 다양한 복잡한 네트워크 커뮤니케이션 작업을 구현할 수 있습니다.
curl_init을 통해 생성 된 각 컬 핸들은 특정 시스템 리소스가 할당됩니다. 요청이 완료된 후 Curl_Close 가이 핸들을 닫기 위해 호출되지 않으면 이러한 리소스가 해제되지 않으므로 메모리 누출 또는 연결 풀 피로가 발생합니다.
동시성 시나리오 에서이 문제는 훨씬 더 심각하며 서비스 충돌로 이어질 수 있습니다. 따라서 요청이 성공하든 실패하든, 완료 후 Curl_Close를 호출하여 핸들을 파괴하고 리소스를 제거하십시오 .
다음은 Curl_Close를 올바르게 사용하는 방법을 보여주는 일반적인 CURL 요청 프로세스입니다.
<?php
// 초기화 cURL 세션
$ch = curl_init();
// 대상 설정 URL
curl_setopt($ch, CURLOPT_URL, "https://gitbox.net/api/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 요청을 실행하십시오
$response = curl_exec($ch);
// 요청이 잘못되었는지 확인하십시오
if (curl_errno($ch)) {
echo '요청 오류: ' . curl_error($ch);
} else {
echo '응답 내용: ' . $response;
}
// 폐쇄세션并释放资源
curl_close($ch);
?>
위의 예에서 Curl_Close ($ CH) 는 전체 요청 프로세스의 마지막 단계이며 프로그램이 불필요한 연결을 유지하지 않도록합니다.
최신 PHP-CURL은 특히 Curl_multi 인터페이스 또는 HTTP/2 멀티플렉싱이 활성화되는 시나리오에서 연결 재사용을 지원합니다. 예를 들어 영구 연결 옵션을 활성화하는 경우 다음과 같습니다.
curl_setopt($ch, CURLOPT_FORBID_REUSE, false);
현재 연결 풀에 연결되어 재사용을 기다릴 수 있습니다. 그러나 연결 풀의 관리는 핸들 관리와 동일하지 않습니다 . 기본 연결이 재사용 되더라도 Curl_Close는 여전히 수행 해야하는 작업이며 사용자 공간의 핸들과 관련된 데이터 구조를 파괴 할 책임이 있습니다.
curl_multi_init 다중 핸들 동시 요청 메소드를 사용하는 경우 작업이 완료된 후 차례로 모든 핸들을 닫아야합니다.
$mh = curl_multi_init();
$ch1 = curl_init("https://gitbox.net/api/one");
$ch2 = curl_init("https://gitbox.net/api/two");
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);
curl_multi_select($mh);
} while ($active && $status == CURLM_OK);
// 결과를 얻으십시오
$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);
// 폐쇄 multi 핸들
curl_multi_close($mh);
여기에서 특히 강조됩니다. 핸들을 제거하기 전에 모든 작업이 완료되었는지 확인하십시오. 그렇지 않으면 정의되지 않은 동작이 발생할 수 있습니다.
CURL을 사용할 때는 Curl_Close를 호출하여 자원을 릴리스하는 것이 강력한 PHP 응용 프로그램을 작성하기위한 기본 요구 사항입니다. 최신 버전의 PHP 및 운영 체제는 프로세스가 끝날 때 자원을 자동으로 재활용 할 수 있지만 시스템 재활용에 의존하는 것은 안전하지 않은 관행입니다. 자원을 적극적으로 마감하면 프로그램의 안정성을 향상시킬뿐만 아니라 문제를 찾고 성능을 최적화하는 데 도움이됩니다.
고주파 요청, 동시 실행 작업 및 외부 API에 호출하는 경우 개발자는 CURL_CLOSE를 표준 프로세스로 향하지 않은 단계로 포함시켜야합니다.
우수한 자원 관리 습관을 통해 많은 숨겨진 문제를 피하고 PHP 응용 프로그램을보다 강력하고 효율적으로 만들 수 있습니다.