>백엔드 개발 >PHP 튜토리얼 >다중 스레드 collection_php 예제를 구현하기 위해 CURL_MULTI를 사용하는 PHP의 예

다중 스레드 collection_php 예제를 구현하기 위해 CURL_MULTI를 사용하는 PHP의 예

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-05-16 20:39:03960검색

지난 이틀 동안 고객이 로그인 없는 게시 모듈을 사용자 정의했습니다. 모듈에는 성능 문제를 고려하여 많은 이미지 다운로드 문제가 필요하기 때문에 웹 페이지를 원격으로 수집하기 위해 특별히 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 반환;
}

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.