2
나는 curl_multi_ * I는 각 핸들의 내용을 잡아 curl_multi_getcontents를 사용cURL 핸들 시간이 초과되었는지 어떻게 확인할 수 있습니까?
와 약 100 URL로 연결하는 스크립트를 가지고 있지만, 연결이 성공하면 내가 확인하는 방법?
나는 curl_multi_ * I는 각 핸들의 내용을 잡아 curl_multi_getcontents를 사용cURL 핸들 시간이 초과되었는지 어떻게 확인할 수 있습니까?
와 약 100 URL로 연결하는 스크립트를 가지고 있지만, 연결이 성공하면 내가 확인하는 방법?
curl_multi를 어떻게 구현하는지 모르지만 예제 1을 기반으로 한이 스크립트는 php.net/manual/en/function.curl-multi-info-read.php에 도움이 될 수 있습니다. 관련 변경 사항은 주석으로 표시됩니다.
$urls = array(
"http://example.com/",
"http://qwe.rtyuiop.com/",
"http://php.net/"
);
$mh = curl_multi_init();
foreach ($urls as $i => $url) {
$conn[$i] = curl_init($url);
curl_setopt($conn[$i], CURLOPT_RETURNTRANSFER, 1);
curl_multi_add_handle($mh, $conn[$i]);
// Set up info array:
$multi_info[(integer) $conn[$i]]['url'] = $url;
}
do {
$status = curl_multi_exec($mh, $active);
$info = curl_multi_info_read($mh);
if (false !== $info) {
// Add connection info to info array:
if (!$info['result']) {
$multi_info[(integer) $info['handle']]['error'] = 'OK';
} else {
$multi_info[(integer) $info['handle']]['error'] = curl_error($info['handle']);
}
}
} while ($status === CURLM_CALL_MULTI_PERFORM || $active);
foreach ($urls as $i => $url) {
$res[$i] = curl_multi_getcontent($conn[$i]);
curl_close($conn[$i]);
}
// Display result messages:
foreach ($multi_info as $each) {
echo $each['url'] . ' => ' . $each['error'] . "\n";
}
/**
Output:
http://example.com/ => OK
http://qwe.rtyuiop.com/ => Could not resolve host: qwe.rtyuiop.com; Host not found
http://php.net/ => OK
**/
전송 횟수, 해당 URL에 대한 메시지 CURLE_OPERATION_TIMEOUTED (28 INT), 같은 대응 한되어야하는 경우 "작동 시간 초과. 지정된 타임 아웃 시간은 조건에 따라 도달 한" (curl.haxx.se/libcurl/c/libcurl-errors.html).
CURLM_INTERNAL_ERROR – ajreal