php中foreach结合curl实现多线程的方法分析
本文实例讲述了php中foreach结合curl实现多线程的方法。分享给大家供大家参考,具体如下:
多线程是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);
上面代码需要特别注意的是,curl_close 一定要放在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(
'https://www.jb51.net',
'http://tools.jb51.net',
));
这里主要利用curl_multi_init()实现多个url 的请求,不过由于php自身并不支持多线程,所以伪多线程速度也不见得会比单线程快.
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php curl用法总结》、《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php正则表达式用法总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
相关文章
php自定义排序uasort函数示例【二维数组按指定键值排序】
这篇文章主要介绍了php自定义排序uasort函数,结合实例形式分析了php实现二维数组按指定键值排序的相关操作技巧,需要的朋友可以参考下2019-06-06
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
以下是对php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法进行了详细的分析介绍,需要的朋友可以过来参考下2013-08-08
PHP中判断文件存在使用is_file还是file_exists?
这篇文章主要介绍了PHP中判断文件存在使用is_file还是file_exists?本文使用一个测试程序证明使用哪个函数比较好,需要的朋友可以参考下2015-04-04
php addslashes和mysql_real_escape_string
本文介绍的是用 mysql_real_escape_string对用户提交数据进行整理处理和通过addslashes以及mysql_escape_string这3个类似的功能函数的区别。经过转义的数据可以直接插入到数据库中。2010-01-01


最新评论