PHP CURL 多线程操作代码实例

5年以前  |  阅读数:1062 次  |  编程语言:PHP 

使用方法:


    $urls = array("http://baidu.com", "http://21andy.com", "http://google.com");
    $mp = new MultiHttpRequest($urls);
    $mp->start();

    /*
     * Curl 多线程类
     * 使用方法:
     * ========================
    $urls = array("http://baidu.com", "http://dzone.com", "http://google.com");
    $mp = new MultiHttpRequest($urls);
    $mp->start();
     * ========================
     */
    class MultiHttpRequest {
      public $urls = array();
      public $curlopt_header = 1;
      public $method = "GET";

      function __construct($urls = false) {
        $this->urls = $urls;
      }

      function set_urls($urls) {
        $this->urls = $urls;
        return $this;
       }

       function is_return_header($b) {
         $this->curlopt_header = $b;
         return $this;
       }

       function set_method($m) {
         $this->medthod = strtoupper($m);
         return $this;
       }

       function start() {
         if(!is_array($this->urls) or count($this->urls) == 0){
          return false;
         }
         $curl = $text = array();
         $handle = curl_multi_init();
         foreach($this->urls as $k=>$v){
          $curl[$k] = $this->add_handle($handle, $v);
         }

         $this->exec_handle($handle);
         foreach($this->urls as $k=>$v){
           curl_multi_getcontent($curl[$k]);
           echo $curl[$k]."\n";
           //$text[$k] = curl_multi_getcontent($curl[$k]);
           //echo $text[$k], "\n\n";
           curl_multi_remove_handle($handle, $curl[$k]);
         }
         curl_multi_close($handle);
       }

       private function add_handle($handle, $url) {
         $curl = curl_init();
         curl_setopt($curl, CURLOPT_URL, $url);
         curl_setopt($curl, CURLOPT_HEADER, $this->curlopt_header);
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
         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分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例