php中foreach結合curl實作多執行緒的方法實例分析

墨辰丷
發布: 2023-03-28 22:14:01
原創
1598 人瀏覽過

這篇文章主要介紹了php中foreach結合curl實現多線程的方法,結合實例形式分析了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.&#39;##:&#39;.$data.&#39;<br>&#39;;
}
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(
 &#39;http://www.jb51.net&#39;,
 &#39;http://tools.jb51.net&#39;,
));
登入後複製

這裡主要利用curl_multi_init()實作多個url 的請求,不過由於php本身不支援多執行緒,所以偽多執行緒速度也不會比單一線程快.

總結:以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。

相關推薦:

php將服務端的檔案讀出來顯示在web頁面實例

利用php做伺服器和web前端的介面進行交互

#利用php實作一週內自動登入儲存機制

#

以上是php中foreach結合curl實作多執行緒的方法實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板