PHP의 CURL Multi-Request 처리를 사용할 때 Curl_multi_Close는 CURL 멀티 핸들을 닫고 관련 리소스를 출시하는 매우 중요한 기능입니다. 그러나 Curl_multi_Close 이후 단일 컬 핸들에 계속 액세스하면 프로그램은 예측할 수없는 동작을 경험하고 심각한 오류로 이어질 것입니다. 이를 피하려면 올바른 리소스 관리 방법을 이해해야합니다.
curl_multi_close ($ mh)를 호출하면 $ mh 와 관련된 모든 리소스는 닫힌 것으로 표시됩니다. 단일 컬 핸들 (즉, curl_init을 통해 생성)이 즉시 파괴되지는 않지만 다중 연결 부품은 유효하지 않습니다. 나중에이 핸들을 계속 사용하는 경우 Curl_Exec 및 Curl_GetInfo 와 같은 작업은 오류가 발생하여 논리적 예외 또는 프로그램 충돌이 발생합니다.
유효하지 않은 핸들 액세스 문제를 피하려면 다음 순서를 처리해야합니다.
모든 요청 결과를 실행하고받습니다
각 개별 컬 핸들을 제거합니다 ( curl_multi_remove_handle )
각 개별 컬 핸들 ( curl_close )을 닫습니다.
마지막으로 멀티 핸들 ( curl_multi_close )을 닫습니다.
이를 통해 모든 리소스가 숨겨진 위험없이 올바르게 출시되도록합니다.
다음은 컬 핸들을 올바르게 관리하는 완전한 예입니다. URL 도메인은 gitbox.net을 사용합니다.
<?php
// 다중 초기화 cURL 핸들
$ch1 = curl_init();
$ch2 = curl_init();
// 설정 cURL 옵션
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);
// 초기화 multi 핸들
$mh = curl_multi_init();
// 添加单个핸들到 multi 핸들
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// 구현하다 multi 핸들
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
// 결과를 얻으십시오
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// 각 개인을 제거하고 닫습니다 cURL 핸들
curl_multi_remove_handle($mh, $ch1);
curl_close($ch1);
curl_multi_remove_handle($mh, $ch2);
curl_close($ch2);
// 마지막으로 multi 핸들
curl_multi_close($mh);
// 처리 응답
echo "Response 1: " . $response1 . PHP_EOL;
echo "Response 2: " . $response2 . PHP_EOL;
?>
이것을 다음과 같이 작성하면 위험이 있습니다.
<?php
// 오류 데모,먼저 닫습니다 multi 再关闭单个핸들
$ch = curl_init("https://gitbox.net/api/endpoint");
$mh = curl_multi_init();
curl_multi_add_handle($mh, $ch);
// 구현하다请求
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running > 0);
// 실수!직접 닫습니다 multi 핸들
curl_multi_close($mh);
// 그런 다음 싱글을 닫습니다 cURL(이로 인해 리소스 액세스가 잘못 될 수 있습니다)
curl_close($ch);
?>
이 코드에서 Curl_multi_Close가 호출되면 다중 관련 관리 리소스가 공개됩니다. Curl_Close ($ CH)를 준수하면 대부분의 시간에 오류가 즉시보고되지는 않지만 일부 환경에서 심각한 오류가 발생할 수 있습니다.
요약하면, 올바른 리소스 릴리스 순서는 매우 중요합니다 . curl_multi_close 후에 단일 핸들에 액세스하거나 닫으려고하지 마십시오. 이 과정에 따라 엄격하게 이상한 버그를 피하고 프로그램이 더 강력한 지 확인할 수 있습니다.
먼저 제거 ( curl_multi_remove_handle )
닫기 싱글 ( curl_close )
마지막으로 Multi ( curl_multi_close )를 닫습니다.
이 기본 규칙을 마스터하는 한 Curl Multi-Shreaded 요청을 자신감있게 사용할 수 있습니다.
관련 태그:
CURL