: This article describes how to use curl_multi_init to process network data in parallel with multiple threads. For more information about PHP tutorials, see.
For ($ I = 0; $ I <100; $ I ++) {$ urls [] =" http://blog.csdn.net/lg_lin?wd= ". Mt_rand (Random, 20000) ;}$ t = microtime (true); // single-thread foreach ($ urlsas $ key =>$ value) {$ ch = curl_init (); curl_setopt ($ ch, success, FALSE); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt ($ ch, CURLOPT_TIMEOUT, 30); curl_setopt ($ ch, CURLOPT_URL, $ value); $ response = curl_exec ($ ch); curl_close ($ ch); $ result_new [$ key] = $ response;} var_dump ($ result_new ); $ e = microtime (true); echo "For loop :". ($ e-$ t ). "\ n";/************* due to network bandwidth restrictions, the concurrency cannot be too large at a time, and can be processed in batches * After the total amount exceeds 100, the effect is significantly higher than that of a single thread */$ p = 5; // how many lines are executed each time $ ring = ceil (count ($ urls)/$ p ); for ($ n = 0; $ n <$ ring; $ n ++) {$ temp_url = array (); $ star = $ n * $ p; $ end = ($ n + 1) * $ p; for ($ ii = $ star; $ ii <$ end; $ ii ++) {if (isset ($ urls [$ ii]) {$ temp_url [] = $ urls [$ ii] ;}}$ mh = curl_multi_init (); foreach ($ temp_urlas $ I => $ url) {$ conn [$ I] = curl_init ($ url); curl_setopt ($ conn [$ I], CURLOPT_USERAGENT, $ _ SERVER ['http _ USER_AGENT ']); curl_setopt ($ conn [$ I], CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt ($ conn [$ I], CURLOPT_RETURNTRANSFER, TRUE ); curl_setopt ($ conn [$ I], CURLOPT_TIMEOUT, 30); curl_setopt ($ conn [$ I], CURLOPT_URL, $ url); curl_multi_add_handle ($ mh, $ conn [$ I]);} do {curl_multi_exec ($ mh, $ active);} while ($ active); $ active = null; foreach ($ temp_urlas $ I =>$ url) {$ data [$ I] = curl_multi_getcontent ($ conn [$ I]); // Obtain The crawled code string} foreach ($ temp_urlas $ I =>$ url) {curl_multi_remove_handle ($ mh, $ conn [$ I]); curl_close ($ conn [$ I]);} curl_multi_close ($ mh); var_dump ($ data);} $ t = microtime (true); echo "multithreading :". ($ t-$ e ). "\ n"; exit ();
Copyright Disclaimer: This article is an original article by the blogger and cannot be reproduced without the permission of the blogger.
The preceding section describes how to use curl_multi_init to process network data in parallel with multiple threads, including some content. if you are interested in the PHP Tutorial, you can help.