日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

php多线程foreach,php中foreach curl实现多线程例子

發布時間:2025/3/21 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php多线程foreach,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.'
';

}

curl_close($ch);

上面代碼需要特別注意的是,curl_close 一定要放在foreach循環結束的外面,如果放在里面的話,就會出現我上面提到的多個IMGURL ,只能采集到一個URL的問題。

方法2:多線程循環

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.jquerycn.cn',

'http://qq.jquerycn.cn',

));

這里主要利用curl_multi_init()實現多個url 的請求,不過由于php自身并不支持多線程。所以偽多線程速度也不見得會比單線程快。

總結

以上是生活随笔為你收集整理的php多线程foreach,php中foreach curl实现多线程例子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。