国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

PHP使用curl_multi實現并發請求的方法示例

2024-05-05 00:03:26
字體:
來源:轉載
供稿:網友

本文實例講述了PHP使用curl_multi實現并發請求的方法。分享給大家供大家參考,具體如下:

class CurlMultiUtil {  /**  * 根據url,postData獲取curl請求對象,這個比較簡單,可以看官方文檔  */  private static function getCurlObject($url,$postData=array(),$header=array()){    $options = array();    $url = trim($url);    $options[CURLOPT_URL] = $url;    $options[CURLOPT_TIMEOUT] = 3;    $options[CURLOPT_RETURNTRANSFER] = true;    foreach($header as $key=>$value){      $options[$key] =$value;    }    if(!empty($postData) && is_array($postData)){      $options[CURLOPT_POST] = true;      $options[CURLOPT_POSTFIELDS] = http_build_query($postData);    }    if(stripos($url,'https') === 0){      $options[CURLOPT_SSL_VERIFYPEER] = false;    }    $ch = curl_init();    curl_setopt_array($ch,$options);    return $ch;  }  /**   * [request description]   * @param [type] $chList   * @return [type]   */  private static function request($chList){    $downloader = curl_multi_init();    // 將三個待請求對象放入下載器中    foreach ($chList as $ch){      curl_multi_add_handle($downloader,$ch);    }    $res = array();    // 輪詢    do {      while (($execrun = curl_multi_exec($downloader, $running)) == CURLM_CALL_MULTI_PERFORM);      if ($execrun != CURLM_OK) {        break;      }      // 一旦有一個請求完成,找出來,處理,因為curl底層是select,所以最大受限于1024      while ($done = curl_multi_info_read($downloader)){        // 從請求中獲取信息、內容、錯誤        // $info = curl_getinfo($done['handle']);        $output = curl_multi_getcontent($done['handle']);        // $error = curl_error($done['handle']);        $res[] = $output;        // 把請求已經完成了得 curl handle 刪除        curl_multi_remove_handle($downloader, $done['handle']);      }      // 當沒有數據的時候進行堵塞,把 CPU 使用權交出來,避免上面 do 死循環空跑數據導致 CPU 100%      if ($running) {        $rel = curl_multi_select($downloader, 1);        if($rel == -1){          usleep(1000);        }      }      if($running == false){        break;      }    }while(true);    curl_multi_close($downloader);    return $res;  }  /**   * [get description]   * @param [type] $urlArr   * @return [type]   */  public static function get($urlArr){    $data = array();    if (!empty($urlArr)) {      $chList = array();      foreach ($urlArr as $key => $url) {        $chList[] = self::getCurlObject($url);      }      $data = self::request($chList);    }    return $data;  }}

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 柯坪县| 水城县| 永定县| 顺昌县| 旌德县| 虞城县| 陕西省| 察雅县| 莒南县| 闽清县| 新密市| 马龙县| 喀喇| 沙河市| 建宁县| 樟树市| 沐川县| 宁阳县| 江华| 尼玛县| 镶黄旗| 诸城市| 沈丘县| 离岛区| 平果县| 中山市| 文山县| 分宜县| 嘉善县| 新绛县| 建水县| 无极县| 龙江县| 新绛县| 新安县| 新竹市| 商都县| 秦皇岛市| 乐昌市| 寿光市| 蓬安县|