
curl_multi_exec 함수는 동시 전송을 수행하는 동안 반환 값을 처리하는 방법은 다음과 같습니다.
- 반환 값이 CURLM_CALL_MULTI_PERFORM 인 경우, 더 많은 데이터가 전송되기 때문에 다시 호출해야 합니다.
- 반환 값이 CURLM_CALL_MULTI_DONE 인 경우, 전송이 완료되었습니다.
- 반환 값이 CURLM_CALL_MULTI_TIMEOUT 인 경우, 전송이 타임아웃되었습니다.
curl_multi_exec 함수를 사용하는 동안 발생할 수 있는 오류를 핸들링하는 방법은 다음과 같습니다.
- CURLM_CALL_MULTI_ERROR: 전송 중 오류가 발생했습니다. 오류 코드를 확인하여 원인에 따라 처리해야 합니다.
- CURLM_CALL_MULTI_SOCKET: 소켓 오류가 발생했습니다. 소켓을 다시 연결하거나 오류를 핸들링해야 합니다.
curl_multi_exec 함수를 사용하여 동시 전송을 수행할 때, 최대 동시 전송 개수를 설정하는 방법은 다음과 같습니다.
- curl_multi_setopt 함수를 사용하여 CURLMOPT_MAXCONNECTS 옵션을 설정합니다. 이 옵션은 최대 동시 전송 개수를 지정합니다.
- curl_multi_setopt 함수를 사용하여 CURLMOPT_PIPELINING 옵션을 설정합니다. 이 옵션은 파이프라이닝을 활성화하여 동시 전송을 향상시킬 수 있습니다.
예제 코드는 다음과 같습니다.
#hostingforum.kr
php
$mh = curl_multi_init();
curl_multi_setopt($mh, CURLMOPT_MAXCONNECTS, 10); // 최대 동시 전송 개수 설정
curl_multi_setopt($mh, CURLMOPT_PIPELINING, CURLPIPE_MULTIPART); // 파이프라이닝 활성화
$ch = array();
for ($i = 0; $i < 10; $i++) {
$ch[] = curl_init();
curl_setopt($ch[$i], CURLOPT_URL, 'http://example.com');
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($mh, $ch[$i]);
}
do {
$mrc = curl_multi_exec($mh, $active);
if ($mrc == CURLM_CALL_MULTI_PERFORM) {
// 더 많은 데이터가 전송되기 때문에 다시 호출해야 함
} elseif ($mrc == CURLM_CALL_MULTI_DONE) {
// 전송이 완료됨
} elseif ($mrc == CURLM_CALL_MULTI_TIMEOUT) {
// 전송이 타임아웃됨
} elseif ($mrc == CURLM_CALL_MULTI_ERROR) {
// 전송 중 오류가 발생함
$error = curl_multi_getcontent($ch[$i]);
// 오류 코드를 확인하여 원인에 따라 처리해야 함
} elseif ($mrc == CURLM_CALL_MULTI_SOCKET) {
// 소켓 오류가 발생함
// 소켓을 다시 연결하거나 오류를 핸들링해야 함
}
} while ($active);
curl_multi_remove_handle($mh, $ch[$i]);
curl_multi_close($mh);
2025-03-20 06:46