好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > PHP實現的CURL非阻塞調用類

PHP實現的CURL非阻塞調用類

熱門標簽:宿州正規外呼系統軟件 企業400電話辦理多少費用 太原400電話申請流程 神龍斗士電話機器人 萍鄉商鋪地圖標注 桂陽公司如何做地圖標注 電信外呼系統多少錢一個月 合肥企業外呼系統線路 代理打電話機器人

本文實例講述了PHP實現的CURL非阻塞調用類。分享給大家供大家參考,具體如下:

前面一篇《PHP實現非阻塞模式的方法》文章講述了PHP中實現非阻塞模式,其實如果只是HTTP的話,直接用CURL就能實現。

基于網上的一段代碼,修改完善后封裝了一個支持POST/GET的非阻塞調用類。

歡迎測試bug~~~~~

/*****************************************************
 CURL 非阻塞調用類
 Auther: Linvo
 Copyright(C) 2010/10/21
*******************************************************/
/*
  // 使用范例
  // 傳入參數說明
  // url 請求地址
  // data POST方式數據
  //并發調用
  $param1 = array(
      array(
        'url' => "http://localhost/a.php?s=1",
        ),
      array(
        'url' => "http://localhost/a.php?s=1",
        'data' => array('aaa' => 1, 'bbb' => 2),
        ),
      );
  //單個調用
  $param2 = array(
      'url' => "http://localhost/a.php?s=0",
      'data' => array('aaa' => 1, 'bbb' => 2),
      );
  //單個調用(GET簡便方式)
  $param3 = 'http://localhost/a.php?s=2';
  $ac = new AsyncCURL();
  $ac->set_param($param1);
  $ret = $ac->send();
  //返回值為請求參數順序的結果數組(元素值為False表示請求錯誤)
  var_dump($ret);
*/
class AsyncCURL
{
  /**
   * 是否需要返回HTTP頭信息
   */
  public $curlopt_header = 0;
  /**
   * 單個CURL調用超時限制
   */
  public $curlopt_timeout = 20;
  private $param = array();
  /**
   * 構造函數(可直接傳入請求參數)
   *
   * @param array 可選
   * @return void
   */
  public function __construct($param = False)
  {
    if ($param !== False)
    {
      $this->param = $this->init_param($param);
    }
  }
  /**
   * 設置請求參數
   *
   * @param array
   * @return void
   */
  public function set_param($param)
  {
    $this->param = $this->init_param($param);
  }
  /**
   * 發送請求
   *
   * @return array
   */
  public function send()
  {
    if(!is_array($this->param) || !count($this->param))
    {
      return False;
    }
    $curl = $ret = array();
    $handle = curl_multi_init();
    foreach ($this->param as $k => $v)
    {
      $param = $this->check_param($v);
      if (!$param) $curl[$k] = False;
      else $curl[$k] = $this->add_handle($handle, $param);
    }
    $this->exec_handle($handle);
    foreach ($this->param as $k => $v)
    {
      if ($curl[$k])
      {
        $ret[$k] = curl_multi_getcontent($curl[$k]);
        curl_multi_remove_handle($handle, $curl[$k]);
      } else {
        $ret[$k] = False;
      }
    }
    curl_multi_close($handle);
    return $ret;
  }
  //以下為私有方法
  private function init_param($param)
  {
    $ret = False;
    if (isset($param['url']))
    {
      $ret = array($param);
    } else {
      $ret = isset($param[0]) ? $param : False;
    }
    return $ret;
  }
  private function check_param($param = array())
  {
    $ret = array();
    if (is_string($param))
    {
      $url = $param;
    } else {
      extract($param);
    }
    if (isset($url))
    {
      $url = trim($url);
      $url = stripos($url, 'http://') === 0 ? $url : NULL;
    }
    if (isset($data)  is_array($data)  !empty($data))
    {
      $method = 'POST';
    } else {
      $method = 'GET';
      unset($data);
    }
    if (isset($url)) $ret['url'] = $url;
    if (isset($method)) $ret['method'] = $method;
    if (isset($data)) $ret['data'] = $data;
    $ret = isset($url) ? $ret : False;
    return $ret;
  }
  private function add_handle($handle, $param)
  {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $param['url']);
    curl_setopt($curl, CURLOPT_HEADER, $this->curlopt_header);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_TIMEOUT, $this->curlopt_timeout);
    if ($param['method'] == 'POST')
    {
      curl_setopt($curl, CURLOPT_POST, 1);
      curl_setopt($curl, CURLOPT_POSTFIELDS, $param['data']);
    }
    curl_multi_add_handle($handle, $curl);
    return $curl;
  }
  private function exec_handle($handle)
  {
    $flag = null;
    do {
      curl_multi_exec($handle, $flag);
    } while ($flag > 0);
  }
}

更多關于PHP相關內容感興趣的讀者可查看本站專題:《php curl用法總結》、《PHP網絡編程技巧總結》、《PHP數組(Array)操作技巧大全》、《php字符串(string)用法總結》、《PHP數據結構與算法教程》及《PHP中json格式數據操作技巧匯總》

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

您可能感興趣的文章:
  • php 多進程編程父進程的阻塞與非阻塞實例分析
  • 簡單介紹PHP非阻塞模式
  • PHP實現非阻塞模式的方法分析
  • php使用flock阻塞寫入文件和非阻塞寫入文件的實例講解
  • 關于PHP中協程和阻塞的一些理解與思考
  • PHP編程中的Session阻塞問題與解決方法分析
  • php基于session鎖防止阻塞請求的方法分析
  • 深入解析PHP中的(偽)多線程與多進程
  • 深入探究PHP的多進程編程方法
  • php多進程中的阻塞與非阻塞操作實例分析

標簽:衡陽 綏化 辛集 白銀 鄂州 崇左 太原 廊坊

巨人網絡通訊聲明:本文標題《PHP實現的CURL非阻塞調用類》,本文關鍵詞  PHP,實現,的,CURL,非,阻塞,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP實現的CURL非阻塞調用類》相關的同類信息!
  • 本頁收集關于PHP實現的CURL非阻塞調用類的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 俄罗斯free性极品| 风流少妇妇A片麻豆| 吸我一个吻手机播放| 国产精品japanese人妖| 女人与牲囗乱婬视频| 喜欢被qj的强壮军人h| 失禁尿翻白爽h| 波多野结衣家庭| 又大又粗又硬又紧又爽| 国产高清无线码2024| 亚洲综合在线网| 国产精品亚洲а∨天堂免在线 | 免费60分钟床上色视频无限 | 1717she真正精品免费观看| 《甜性涩爱》电影在线观看| 日本欧美大码a在线观看| 无删无遮挡动漫肉在线观看| 美女扒开胸罩秘?视频| 《禁忌2/美国禁忌2| 91秒拍国产福利一区| 色爱综合区五月小说| 国产99精品免费视频看6| 亚洲欧美日韩国产综合一区 粉嫩| 高潮抽搐失禁大喷水尖叫| 日夜噜| free哆拍拍免费永久视频 | Free性XXXXⅩonHD漫画| 久久午夜无码鲁丝片秋霞欧美AV6| 女女同性三级好看电影| 亚洲大成色www永久网站| 欧美日韩一区二区三区四区在线观看| 亚洲视频免| 国产一区二区三区精品小说| 国产精品主播一区二区主播大秀| 欧美精品国产精品浪潮Av| 国产高清在线视频伊甸园| 欧美黑人狂躁少妇无码中文字幕 | 国产精品亲子乱子伦xxxx裸| 久久99久久99精品免费看小说| 揉?啊?嗯~出水了视频 | 男同桌上课狂揉我下边好软好多水 |