您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么在PHP中實現CURL非阻塞調用類,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
// 使用范例 // 傳入參數說明 // 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的框架:1、Laravel,Laravel是一款免費并且開源的PHP應用框架。2、Phalcon,Phalcon是運行速度最快的一個PHP框架。3、Symfony,Symfony是一款為Web項目準備的PHP框架。4、Yii,Yii是一款快速、安全和專業的PHP框架。5、CodeIgniter,CodeIgniter是一款非常敏捷的開源PHP框架。6、CakePHP,CakePHP是一款老牌的PHP框架。7.Kohana,Kohana是一款敏捷但是功能強大的PHP框架。
上述內容就是怎么在PHP中實現CURL非阻塞調用類,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。