PHP에서 Curl은 HTTP 요청을 보내고 처리 응답을 보내기위한 매우 강력한 라이브러리입니다. 동시 요청을 할 때는 일반적으로 Curl_multi_* 함수를 사용하여 멀티 스레딩을 수행합니다. 요청 수가 증가함에 따라 디버깅 및 문제 해결 오류가 특히 중요해집니다. 이 기사는 Curl_multi_Close 함수와 Curl_error를 사용하여 멀티 스레드 요청에서 오류를 효과적으로 문제 해결하는 방법을 살펴 봅니다.
curl_multi_* 시리즈 함수는 여러 HTTP 요청을 동시에 시작하는 PHP의 함수입니다. 단일 Curl_Exec 과 달리 Curl_multi_*는 한 번에 여러 요청을 실행하고 응답을 처리 할 수 있습니다. 핵심 기능에는 다음이 포함됩니다.
curl_multi_init () : 컬 여러 핸들을 초기화합니다
curl_multi_add_handle () : 여러 핸들에 단일 핸들을 추가합니다
curl_multi_exec () : 모든 추가 된 컬 요청을 실행합니다
curl_multi_getContent () : 각 컬 요청의 응답 내용 가져 오기
curl_multi_remove_handle () : 여러 핸들에서 단일 핸들을 제거합니다
curl_multi_close () : 모든 컬 요청을 닫습니다
CURL_MULTI_CLOSE 는 주로 모든 요청이 실행 된 후 다중 핸들 리소스를 닫는 데 사용되며 CURL_ERROR는 CURL 요청에서 오류 정보를 얻는 데 사용됩니다. 다중 스레드 요청에서 여러 요청이 일반적으로 동시에 처리되며 오류가 즉시 나타나지 않을 수 있습니다. 이 두 기능을 합리적으로 결합하여 오류를 잡고 문제 해결을 도울 수 있습니다.
먼저 CURL 멀티 핸들을 초기화하고 각 요청에 대해 독립적 인 컬 핸들을 만들어야합니다.
$mh = curl_multi_init(); // 여러 핸들을 초기화합니다
$urls = [
"https://example.com/api/endpoint1",
"https://example.com/api/endpoint2",
"https://example.com/api/endpoint3",
];
$curlHandles = [];
foreach ($urls as $index => $url) {
$ch = curl_init($url); // 단일을 초기화하십시오 cURL 핸들
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curlHandles[$index] = $ch;
curl_multi_add_handle($mh, $ch); // 将핸들添加到多핸들中
}
curl_multi_exec을 사용하여 모든 요청을 실행하고 실행 상태를 모니터링하십시오.
$running = null;
do {
curl_multi_exec($mh, $running); // 요청을 실행하십시오
curl_multi_select($mh); // 작업이 완료 될 때까지 기다립니다
} while ($running > 0);
모든 요청이 완료되면 curl_multi_getContent를 통해 각 요청의 응답 내용을 가져오고 Curl_Error를 사용하여 요청이 실패했는지 확인할 수 있습니다.
foreach ($curlHandles as $index => $ch) {
$response = curl_multi_getcontent($ch); // 응답 내용을 얻으십시오
if (curl_errno($ch)) {
// 캡처 오류 메시지
$error_msg = curl_error($ch);
echo "묻다 {$urls[$index]} 오류가 발생했습니다: $error_msg\n";
} else {
echo "묻다 {$urls[$index]} 성공,응답 내용: $response\n";
}
curl_multi_remove_handle($mh, $ch); // 从多핸들中移除
curl_close($ch); // 关闭单个핸들
}
마지막으로 Curl_multi_Close를 사용하여 여러 핸들을 닫고 리소스를 확보하십시오.
curl_multi_close($mh); // 关闭多핸들
API 요청 목록이 있다고 가정하고 동시에 처리 할 때 특정 요청 실패에 직면 할 수 있습니다. 위의 방법을 통해 오류를 포착하고 오류 메시지를 인쇄 할 수 있습니다. 일반적인 오류에는 DNS 해상도 실패, 연결 시간 초과 등이 포함됩니다. 일반적으로 Curl_error는 오류의 특정 원인을 식별하는 데 도움이됩니다.
curl_multi_close 및 curl_error를 사용하여 다중 스레드 요청에 대한 오류 확인과 협력하는 것은 매우 효과적인 디버깅 방법입니다. 각 요청에 대한 오류 정보를 합리적으로 캡처함으로써 동시 요청에서 발생하는 문제를 신속하게 찾아서 해결할 수 있습니다. 동시 요청을 처리 할 때 코드를 명확하고 간결하게 유지하고 과도한 중첩 및 중복 코드를 피하십시오.