php中foreach結(jié)合curl實(shí)現(xiàn)多線程的方法分析
本文實(shí)例講述了php中foreach結(jié)合curl實(shí)現(xiàn)多線程的方法。分享給大家供大家參考,具體如下:
多線程是php不支持的但我們可以通過foreach來偽多線程了,但這個(gè)偽多線程速度不一定比單線程要單到哪里去了,具體來看個(gè)例子.
在利用foreach語句循環(huán)圖片URL,并通過CURL將所有圖片進(jìn)行本地保存的函數(shù)時(shí),出現(xiàn)了只能采集到一個(gè)的問題,現(xiàn)將foreach和CURL結(jié)合進(jìn)行多URL請求的方法進(jìn)行下總結(jié).
方法1:循環(huán)請求
$sr=array(url_1,url_2,url_3); foreach ($sr as $k=>$v) { $curlPost=$v.'?f=傳入?yún)?shù)'; $ch = curl_init($curlPost) ; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 獲取數(shù)據(jù)返回 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在啟用 CURLOPT_RETURNTRANSFER 時(shí)候?qū)@取數(shù)據(jù)返回 $data = curl_exec($ch) ; echo $k.'##:'.$data.'<br>'; } curl_close($ch);
上面代碼需要特別注意的是,curl_close 一定要放在foreach循環(huán)結(jié)束的外面,如果放在里面的話,就會(huì)出現(xiàn)我上面提到的多個(gè)IMGURL,只能采集到一個(gè)URL的問題.
方法2:多線程循環(huán)
<?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( 'http://www.dbjr.com.cn', 'http://tools.jb51.net', ));
這里主要利用curl_multi_init()實(shí)現(xiàn)多個(gè)url 的請求,不過由于php自身并不支持多線程,所以偽多線程速度也不見得會(huì)比單線程快.
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《php curl用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php排序算法總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)學(xué)運(yùn)算技巧總結(jié)》、《php正則表達(dá)式用法總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php中g(shù)et_meta_tags()、CURL與user-agent用法分析
這篇文章主要介紹了php中g(shù)et_meta_tags()、CURL與user-agent用法,以實(shí)例形式較為詳細(xì)的分析了get_meta_tags()、CURL與user-agent使用時(shí)的注意事項(xiàng)與用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12PHP排序算法之歸并排序(Merging Sort)實(shí)例詳解
這篇文章主要介紹了PHP排序算法之歸并排序(Merging Sort),結(jié)合實(shí)例形式詳細(xì)分析了php歸并排序的原理、定義、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-04-04php將mysql數(shù)據(jù)庫整庫導(dǎo)出生成sql文件的具體實(shí)現(xiàn)
下面是php將mysql數(shù)據(jù)庫整庫導(dǎo)出生成sql文件的詳細(xì)代碼,希望對大家在用php編程時(shí)備份數(shù)據(jù)有一定幫助2014-01-01應(yīng)用開發(fā)中涉及到的css和php筆記分享
最近一周使用SAE開發(fā)一個(gè)簡單的微博應(yīng)用。應(yīng)用本身很簡單,使用php算法可以輕松實(shí)現(xiàn)。但是在調(diào)用新浪API的時(shí)候遇到很多各種各樣的麻煩。應(yīng)用到現(xiàn)在還有些不穩(wěn)定。2011-08-08PHP基于phpqrcode生成帶LOGO圖像的二維碼實(shí)例
這篇文章主要介紹了PHP基于phpqrcode生成帶LOGO圖像的二維碼,可實(shí)現(xiàn)生成帶logo與不帶logo兩種二維碼的功能,非常簡單實(shí)用,需要的朋友可以參考下2015-07-07