멀티스레딩(영어: multithreading)은 소프트웨어나 하드웨어에서 여러 스레드의 동시 실행을 구현하는 기술을 말합니다. 멀티스레딩 기능이 있는 컴퓨터에는 동시에 두 개 이상의 스레드를 실행할 수 있는 하드웨어 지원이 있어 전반적인 처리 성능이 향상됩니다. 이 기능을 갖춘 시스템에는 대칭형 멀티프로세서, 멀티코어 프로세서, 칩 수준 멀티스레딩 또는 동시 멀티스레딩 프로세서가 포함됩니다. [1] 프로그램에서 이러한 독립적으로 실행되는 프로그램 조각을 "스레드"라고 하며, 이를 사용하여 프로그래밍하는 개념을 "멀티스레딩"이라고 합니다. 멀티스레딩 기능이 있는 컴퓨터는 하드웨어 지원으로 인해 동시에 두 개 이상의 스레드(대만어로 "스레드")를 실행할 수 있으므로 전반적인 처리 성능이 향상됩니다. PHP는 Curl 함수를 사용하여 브라우저를 시뮬레이션하여 GET,
POST 요청등을 보내는 등 다양한 파일 전송 작업을 완료할 수 있습니다. PHP 언어 자체가 멀티스레딩을 지원하지 않는다는 한계로 인해 크롤러 프로그램 개발 효율성은 높지 않습니다. 이때 동시 멀티스레딩 액세스를 달성할 수 있는 Curl Multi Functions를 사용해야 하는 경우가 많습니다. 여러 URL 주소로. Curl Multi Function은 매우 강력하므로 Curl Multi Functions를 사용하여 동시 멀티스레드 파일 다운로드를 작성할 수 있습니까? 물론 가능합니다. 제 코드는 다음과 같습니다:
코드 1: 얻은 코드를 파일에 직접 작성
코드 다음과 같습니다.
<?php $urls = array( 'http://www.php.cn/', 'http://www.baidu.com/', 'http://www.163.com/' ); // 设置要抓取的页面URL $save_to='/test.txt'; // 把抓取的代码写入该文件 $st = fopen($save_to,"a"); $mh = curl_multi_init(); foreach ($urls as $i => $url) { $conn[$i] = curl_init($url); curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); curl_setopt($conn[$i], CURLOPT_HEADER ,0); curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60); curl_setopt($conn[$i], CURLOPT_FILE,$st); // 设置将爬取的代码写入文件 curl_multi_add_handle ($mh,$conn[$i]); } // 初始化 do { curl_multi_exec($mh,$active); } while ($active); // 执行 foreach ($urls as $i => $url) { curl_multi_remove_handle($mh,$conn[$i]); curl_close($conn[$i]); } // 结束清理 curl_multi_close($mh); fclose($st); ?>
코드 2: 얻은 코드를
변수에 먼저 넣은 다음 파일
에 씁니다. 코드는 다음과 같습니다.
<?php $urls = array( 'http://www.php.cn/', 'http://www.baidu.com/', 'http://www.163.com/' ); $save_to='/test.txt'; // 把抓取的代码写入该文件 $st = fopen($save_to,"a"); $mh = curl_multi_init(); foreach ($urls as $i => $url) { $conn[$i] = curl_init($url); curl_setopt($conn[$i], CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"); curl_setopt($conn[$i], CURLOPT_HEADER ,0); curl_setopt($conn[$i], CURLOPT_CONNECTTIMEOUT,60); curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,true); // 设置不将爬取代码写到浏览器,而是转化为字符串 curl_multi_add_handle ($mh,$conn[$i]); } do { curl_multi_exec($mh,$active); } while ($active); foreach ($urls as $i => $url) { $data = curl_multi_getcontent($conn[$i]); // 获得爬取的代码字符串 fwrite($st,$data); // 将字符串写入文件。当然,也可以不写入文件,比如存入数据库 } // 获得数据变量,并写入文件 foreach ($urls as $i => $url) { curl_multi_remove_handle($mh,$conn[$i]); curl_close($conn[$i]); } curl_multi_close($mh); fclose($st); ?>
위 내용은 PHP 다중 스레드 웹 페이지 크롤링 예제 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!