bigpipe+curl(php)

<?php
class Multicurl{
    private $param = array();
    private $config= null;

    public function __construct($param){
        $this->param = array_merge($this->param,$param);
    }

    public function rolling_curl(){
        $chs = curl_multi_init();
        foreach ($this->param as $key => $value) {
            $ch = curl_init();
            $curl="{$value}?id={$key}";
            curl_setopt($ch, CURLOPT_URL,"{$curl}");
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_multi_add_handle($chs,$ch);
        }
        do{
            if (($status = curl_multi_exec($chs, $active)) != CURLM_CALL_MULTI_PERFORM) {
                if ($status != CURLM_OK) { break; } //如果没有准备就绪,就再次调用curl_multi_exec
                while ($done = curl_multi_info_read($chs)) {
                    $info = curl_getinfo($done["handle"]);
                    $error = curl_error($done["handle"]);
                    $result = curl_multi_getcontent($done["handle"]);
                    echo $result;
                    curl_multi_remove_handle($chs, $done['handle']);
                    curl_close($done['handle']);
                    if ($active > 0) {
                        curl_multi_select($chs,0.5); //此处会导致阻塞大概0.5秒。
                    }
                }
            }
        }while($active); //还有句柄处理还在进行中
    }

}
?>
<?php
class Singlecurl{
    private $param = array();
    private $config= null;

    public function __construct($param){
        $this->param = array_merge($this->param,$param);      
    }
    public function rolling_curl(){
        foreach ($this->param as $key => $value) {
            $ch = curl_init();
            $curl="{$value}?id={$key}";
            curl_setopt($ch, CURLOPT_URL,"{$curl}");
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec ( $ch );
            echo $output;
            $tim="tim=".microtime(true)."\r\n";
            file_put_contents ( "test.txt" ,  $tim ,  FILE_APPEND|LOCK_EX );
        }
    }
}
?>
<?php
include_once ("Multicurl.class.php");
// include_once ("Singlecurl.class.php");
$body=<<<EOT
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>111</title>
</head>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<body>
    <div id="div1"></div>
    <div id="div2"></div>
    <div id="div3"></div>
</body>
<script>
$("<link>")
    .attr({ rel: "stylesheet",
        type: "text/css",
        href: "./inc/body.css"
    })
    .appendTo("head");

$("<script>")
    .attr({src: "./inc/body.js"})
    .appendTo("head");
</script>
EOT;

echo $body;

$str_arr=array(
    "div1"=>"http://localhost/curltest/1.php",
    "div2"=>"http://localhost/curltest/1.php",
    "div3"=>"http://localhost/curltest/1.php",
    );

$test=new Multicurl($str_arr);
// $test=new Singlecurl($str_arr);
$test->rolling_curl();
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值