php multi curl类

php multi curl 类,有需要用到的自己ctrl+c ctrl+v,以后要发几万条短信搞活动推送消息,发送邮件什么鬼的可以用php multi curl,不用一个一个的去curl,可以省不少时间。

注意:php multi curl每次的数量不宜太大,实际返回的时间是按照最长的那条请求的时间计算的。

<?php
class Curl
{
    /**
     * http请求,$data参数信息$data = array("a" => 1,"b" => 2) written:yangxingyi
     */
    public static function http($url,$data=array(),$timeOut=30)
    {
        try{
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);//设置url
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
			curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeOut);
			if (!empty($data)){
				curl_setopt($ch, CURLOPT_POST, 1);
				curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
			}
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//成功结果返回,不自动输出
            $out = curl_exec($ch);
            curl_close($ch);
            return $out;
        }catch( \Exception $e){
            return $e->getMessage();
        }
    }
    /**
     * 发起多个http请求,written:yangxingyi
	 $nodes = array(
                    [0]=>array('url' => 'http://www.baidu.com','data' => array('a'=>1,'b'=>2),
                    [1]=>array('url' => 'http://www.baidu.com','data' => array('a'=>3,'b'=>4) )
     */
    public static function MultiCurl($nodes,$timeOut=30)
    {
        try 
        {
            if (!is_array($nodes))
            {
                return 'url not support!';exit();
            }
 
            $mh = curl_multi_init(); 
            $curlArray = array();
            foreach($nodes as $key => $info)
            {
                if(!is_array($info)||!isset($info['url'])){
                    continue;
                }
                $ch = curl_init();//初始化
                curl_setopt($ch, CURLOPT_URL, $info['url']);
				curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 
                $data = isset($info['data']) ? $info['data'] :null;
				if (!empty($data)){
					curl_setopt($ch, CURLOPT_POST, 1);
					curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
				}
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//成功结果返回,不自动输出
                curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeOut);//超时
                $curlArray[$key] = $ch;
                curl_multi_add_handle($mh, $curlArray[$key]);
            }
 
            $running = NULL;
            do { 
                usleep(100);//1s=100W微妙
                curl_multi_exec($mh,$running);
            } while($running > 0);
			
            $res = array();
            foreach($nodes as $key => $info)
            { 
                $res[$key] = curl_multi_getcontent($curlArray[$key]); 
            } 
            foreach($nodes as $key => $info){ 
                curl_multi_remove_handle($mh, $curlArray[$key]); 
            } 
            curl_multi_close($mh);     
            return $res;
        } 
        catch ( \Exception $e ) 
        {
			return $e->getMessage();
        }
    }
 
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值