이 기사의 예에서는 PHP에서 foreach와 컬을 결합하여 멀티스레딩을 구현하는 방법을 설명합니다. 참고용으로 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.
PHP는 멀티스레딩을 지원하지 않지만 foreach를 사용하여 의사 멀티스레딩을 수행할 수 있지만 이 의사 멀티스레딩은 지원하지 않습니다. 예를 들어 보겠습니다.
foreach 문을 사용하여 이미지 URL을 반복하고 CURL을 통해 모든 이미지를 로컬에 저장할 때 하나만 수집할 수 있는 문제가 있습니다. . 이제 foreach 및 CURL을 사용하여 여러 URL을 요청하는 방법을 요약해 보겠습니다.
방법 1: 루프 요청
$sr=array(url_1,url_2,url_3); foreach ($sr as $k=>$v) { $curlPost=$v.'?f=传入参数'; $ch = curl_init($curlPost) ; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回 $data = curl_exec($ch) ; echo $k.'##:'.$data.'<br>'; } curl_close($ch);
코드는 특별한 주의가 필요합니다. 컬_닫기는 foreach 루프의 끝 외부에 배치되어야 합니다. 내부에 배치하면 위에서 언급한 것처럼 여러 개의 IMGURL이 발생하며 하나의 URL만 수집할 수 있습니다.
방법 2 : 멀티 스레딩 루프
<?php multi_threads_request($nodes){ $mh = curl_multi_init(); $curl_array = array(); foreach($nodes as $i => $url) { $curl_array[$i] = curl_init($url); curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($mh, $curl_array[$i]); } $running = NULL; do { usleep(10000); curl_multi_exec($mh,$running); } while($running > 0); $res = array(); foreach($nodes as $i => $url) { $res[$url] = curl_multi_getcontent($curl_array[$i]); } foreach($nodes as $i => $url){ curl_multi_remove_handle($mh, $curl_array[$i]); } curl_multi_close($mh); return $res; } print_r(multi_threads_request(array( '//m.sbmmt.com', 'http://tools.php.cn', ));
여기에서는 주로 컬_multi_init()을 사용하여 다중 URL 요청을 구현합니다. 그러나 PHP 자체는 멀티 스레딩을 지원하지 않습니다. , 의사 멀티스레딩 속도는 단일 스레드보다 빠르지 않을 수 있습니다.
이 기사가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.
PHP에서 멀티스레딩을 구현하기 위해 컬과 결합된 foreach 방법에 대한 자세한 분석은 PHP 중국어 웹사이트를 참고하세요!