curl_multi_*
기능을 사용하여 동시에 여러 가지 컬 요청을 실행할 수 있습니다.
그러나 이것은 여전히 가장 느린 요청이 반환 될 때까지 (그리고 응답 구문 분석을 위해 약간의 추가 시간까지) 실행을 차단합니다.
이와 같은 작업은 cronjobs 또는 simliar 대안을 사용하여 백그라운드에서 실행해야합니다.
gitub 및 co.에 더 많은 라이브러리가 있으며, 더 나은 api를 제공하기 위해 컬 확장을 래핑합니다.
개념이로 확인 : (cpu "fix" by [email protected])
function getStatusCodes(array $urls, $useHead = true) {
$handles = [];
foreach($urls as $url) {
$options = [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_NOBODY => $useHead,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HEADER => 0
];
$handles[$url] = curl_init();
curl_setopt_array($handles[$url], $options);
}
$mh = curl_multi_init();
foreach($handles as $handle) {
curl_multi_add_handle($mh, $handle);
}
$running = null;
do {
curl_multi_exec($mh, $running);
curl_multi_select($mh);
} while ($running > 0);
$return = [];
foreach($handles as $handle) {
$return[$eUrl = curl_getinfo($handle, CURLINFO_EFFECTIVE_URL)] = [
'url' => $eUrl,
'status' => curl_getinfo($handle, CURLINFO_HTTP_CODE)
];
curl_multi_remove_handle($mh, $handle);
curl_close($handle);
}
curl_multi_close($mh);
return $return;
}
var_dump(getStatusCodes(['http://google.de', 'http://stackoverflow.com', 'http://google.de/noone/here']));
이 서버 컬 - 확장 가능하게했다? – Rangad
나는 그것이 godaddy라는 것을 인정하는 것을 부끄럽고 현재까지 컬 연장을 피했다 (가정의 방식으로) ... – feelsickened