php中foreach结合curl实现多线程的方法分析

前端之家收集整理的这篇文章主要介绍了php中foreach结合curl实现多线程的方法分析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例讲述了PHP中foreach结合curl实现多线程的方法分享给大家供大家参考,具体如下:

多线程是PHP不支持的但我们可以通过foreach来伪多线程了,但这个伪多线程速度不一定比单线程要单到哪里去了,具体来看个例子.

在利用foreach语句循环图片URL,并通过CURL将所有图片进行本地保存的函数时,出现了只能采集到一个的问题,现将foreach和CURL结合进行多URL请求的方法进行下总结.

方法1:循环请求

$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.'
'; } curl_close($ch);

上面代码需要特别注意的是,curl_close 一定要放在foreach循环结束的外面,如果放在里面的话,就会出现我上面提到的多个IMGURL,只能采集到一个URL的问题.

方法2:多线程循环

PHP;"> $url) { $curl_array[$i] = curl_init($url); curl_setopt($curl_array[$i],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( '//www.jb51.cc','http://tools.jb51.cc',));

这里主要利用curl_multi_init()实现多个url 的请求,不过由于PHP自身并不支持多线程,所以伪多线程速度也不见得会比单线程快.

更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》、《》、《》、《》及《PHP常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

猜你在找的PHP相关文章