지난 이틀 동안 고객이 로그인 없는 게시 모듈을 사용자 정의했습니다. 모듈에는 성능 문제를 고려하여 많은 이미지 다운로드 문제가 필요하기 때문에 웹 페이지를 원격으로 수집하기 위해 특별히 CURL_MULTI 함수를 작성했습니다. 향후 사용을 용이하게 하기 위해 향후에는 원래의 단일 스레드 컬 기능이 각각 사용되지 않을 것으로 추정되며 성능 비교는 분명합니다. 또한 내 블로그의 10개 웹 페이지(curl_multi:4.5246081352234, file_get_contents:33.001797914505)를 얻으십시오. 이는 거의 8배의 효율성입니다. 첨부 파일이 더 많으면 성능 차이가 더 분명해질 것입니다. 당신이 도와줬어요!
$text = 원격(배열('http://www.jb51.net/','http://www.baidu.com/'));
print_r($text);
원격 기능($urls) {
If (!is_array($urls) 또는 count($urls) == 0) {
false를 반환합니다.
}
$curl = $text = 배열();
$handle=curl_multi_init();
foreach($urls as $k => $v) {
$nurl[$k]= preg_replace('~([^:/.] )~ei', "rawurlencode('\1')", $v);
$curl[$k] = 컬_init($nurl[$k]);
컬_setopt($curl[$k], CURLOPT_RETURNTRANSFER, 1);
컬_setopt($curl[$k], CURLOPT_HEADER, 0);
curl_multi_add_handle($handle, $curl[$k]);
}
$active = null;
하세요 {
$mrc = cur_multi_exec($handle, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
while ($active && $mrc == CURLM_OK) {
If (curl_multi_select($handle) != -1) {
하세요 {
$mrc = cur_multi_exec($handle, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}
foreach ($curl을 $k => $v) {
If (curl_error($curl[$k]) == "") {
$text[$k] = (문자열)curl_multi_getcontent($curl[$k]);
}
curl_multi_remove_handle($handle, $curl[$k]);
curl_close($curl[$k]);
}
컬_다중_닫기($handle);
$text 반환;
}