php批量处理问题

最近接到一个需求,批量发送短信,但是没有批量发送接口, 这样意味着我只能走单发的接口,1万个短信,就要走1万次了,如果一直让用户等下去,肯定是不好滴。苦心研究,出来了方法,贴在下面。

首先,上传excel,解读数据,并存入数据库,

接下来,去请求一个php文件,由于是一个耗时操作,我不等他返回,只发送请求过去,通知用户,已成功添加到后台任务。

   function sendMS($mass_id=''){
    if(!$mass_id)exit('hello,welcome!');
    $host = $_SERVER['SERVER_NAME'];
    $fp = fsockopen($host, 80, $errno, $errstr, 5);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $param = http_build_query(['mass_id'=>$mass_id]);
        $out = "GET /App/Public/sendM?".$param." HTTP/1.1\r\n";
        $out .= "Host: ".$host."\r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
         usleep(1000); // 这一句也是关键,网络传输需要时间
        fclose($fp);
   //     echo '1';
    }
}

因为这个短信接口比较复杂,也不想复制,就复用前台的短信接口,

//前台的批量发送 
function sendM(){
    error_reporting(0);//防止报错信息暴露
    set_time_limit(0);
    $map['mass_id']=$_GET['mass_id'];
    if(!$map['mass_id'])exit('缺少关键值');
    $map['status']=3;
    $res = M('sms_mass_list')->where($map)->select();
    $content = M('sms_mass')->field('content')->find($map['mass_id'])['content'];
    ignore_user_abort(true); // 客户端关闭程序继续执行
    foreach($res as $k=>$v){
        $dataArr['mobile']=$v['mobile'];
        $dataArr['content']=$content;
        $tmpRes=R('App/index/sendM',$dataArr);
        if($tmpRes){
            $v['status']=1;
            M('sms_mass_list')->save($v);
        }else{
            $v['reason']= '网络或其他原因';//接口暂时不能返回失败原因
            $v['send_time'] = date('Y-m-d H:i:s');
            M('sms_mass_list')->save($v);
        }
    }
}

这样执行的话,就相当于讲任务添加到后台了,即使用户关闭浏览器,关闭窗口,这个程序依然会执行,除非php down掉或者重启,不然这个任务会执行下去。

gwvjbi

2017-05-23 13:02:03
V07MgR <a href="http://qbtcphlpjpyb.com/">qbtcphlpjpyb</a>, [url=http://yxblwgiyzmpp.com/]yxblwgiyzmpp[/url], [link=http://fpzrizrtrypg.com/]fpzrizrtrypg[/link], http://dzctkkvsjjdy.com/

ssniwugq

2017-05-23 10:48:58
mmMWXu <a href="http://ustwmuuzqowt.com/">ustwmuuzqowt</a>, [url=http://maxzqxujdmos.com/]maxzqxujdmos[/url], [link=http://ktwdrfwytwve.com/]ktwdrfwytwve[/link], http://hrapxwknarpy.com/

tjoethd

2017-05-23 08:38:20
pcoswc <a href="http://pkpmvogqupux.com/">pkpmvogqupux</a>, [url=http://fzdpzsldybfb.com/]fzdpzsldybfb[/url], [link=http://vtefatczbutc.com/]vtefatczbutc[/link], http://aolqiimjxeud.com/

marqiarc

2017-05-23 06:28:22
WZsa0X <a href="http://bjmzfbwxkmbl.com/">bjmzfbwxkmbl</a>, [url=http://ufbpahuxedbf.com/]ufbpahuxedbf[/url], [link=http://guarjomkbxph.com/]guarjomkbxph[/link], http://rzmhiarxnynf.com/

wczfag

2017-05-23 03:59:37
ByFy5X <a href="http://qcaqcqugnboh.com/">qcaqcqugnboh</a>, [url=http://kfpkuehhskxy.com/]kfpkuehhskxy[/url], [link=http://gzcidykjmyui.com/]gzcidykjmyui[/link], http://ixpxqfcqgxca.com/

hulkbvzqx

2017-05-23 01:49:55
Nsf1S9 <a href="http://vxhjozsnwazi.com/">vxhjozsnwazi</a>, [url=http://gztopjhbrxso.com/]gztopjhbrxso[/url], [link=http://pxahhavsiavk.com/]pxahhavsiavk[/link], http://cudxdgcrhqzx.com/

rduxazla

2017-05-22 23:47:54
bnhHYi <a href="http://lpdpunfscvvi.com/">lpdpunfscvvi</a>, [url=http://vrvcwiqjxxjc.com/]vrvcwiqjxxjc[/url], [link=http://gipehmimkwza.com/]gipehmimkwza[/link], http://qfmedbarbdfv.com/

JimmiXzSq

2017-05-19 06:01:07
KdeOid http://www.LnAJ7K8QSpkiStk3sLL0hQP6MO2wQ8gO.com

2017-02-16 11:48:54
nickname
content