php header实现导出

  //自定义导出字段
    $('.daily_Btn').click(function(){
        var dateVal = $('#date').val();//时间
        var providerVal = $.trim($('.provider_id').val());//广告主
        var adVal = $.trim($('.adid').val());//广告
        var idfaVal = $.trim($('.idfa').val());//idfa
        var channelVal = $.trim($('.channel_id').val());//渠道
        var msg = "确认导出?";
        if (confirm(msg)==true){
            window.location.href = "../Statistical/dailyDao?dateVal="+dateVal+"&providerVal="+providerVal+"&adVal="+adVal+"&idfaVal="+idfaVal+"&channelVal="+channelVal;
        }else{
            return false;
        }
    })

php 控制器代码
 

    public function dailyDao(){
        ob_end_clean();
        ob_start();
        header("Content-type:application/octet-stream");
        header("Accept-Ranges:bytes");
        header("Content-Disposition:attachment;filename=". date("Ymd") . ".txt");
        header("Expires: 0");
        header("Cache-Control:must-revalidate,post-check=0,pre-check=0");
        header("Pragma:public");
        $request = Request::instance();
        $get_data = $request->param();
        $where = array();
        $table_name = $this->get_idfa_data_table_name(time());//表名
        if(isset($get_data['dateVal']) && isset($get_data['providerVal']) && isset($get_data['adVal']) && isset($get_data['idfaVal']) && isset($get_data['channelVal'])){

            if($get_data['providerVal'] != ''){
                $where['provider_id'] = ['like', '%' . $get_data['providerVal'] . '%'];
            }
            if($get_data['adVal'] != ''){
                $where['adid'] = ['like', '%' . $get_data['adVal'] . '%'];
            }
            if($get_data['idfaVal'] != ''){
                $where['idfa'] = ['like', '%' . $get_data['idfaVal'] . '%'];
            }
            if($get_data['channelVal'] != ''){
                $where['channel_id'] = ['like', '%' . $get_data['channelVal'] . '%'];
            }
            if($get_data['dateVal'] != ''){
                $get_time = explode('~',$get_data['dateVal']);
                $where['click_time'] = array('between',[strtotime($get_time[0]),strtotime($get_time[1]. ' 23:59:59')]);
            }
        }else{
            $todayFirstSeconds = mktime(0, 0, 0, date('m'), date('d'), date('Y'));//当天 00:00:00 时间戳
            $todayLastSeconds = mktime(23, 59, 59, date('m'), date('d'), date('Y'));//当天 23:59:59
            $where['click_time'] = array('between',[$todayFirstSeconds,$todayLastSeconds]);
        }


        $field = 'click_time,provider_id,adid,channel_id,keyword,idfa,adv_active_time,channel_active_time';
        $sqlCount = Db::table($table_name)->where($where)->count('id');
        // 计数器
        $cnt = 0;
        // 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
        $sqlLimit = 10000;
        $limit = 5000;

        //设置表头
        if (strpos($field, 'click_time') !== false) {
            $f_click_time = '点击时间' . "\t";
        }
        if (strpos($field, 'adv_active_time') !== false) {
            $f_adv_active_time = '激活时间' . "\t";
        }
        if (strpos($field, 'channel_active_time') !== false) {
            $f_channel_active_time = '回调时间' . "\t";
        }
        if (strpos($field, 'idfa') !== false) {
            $f_idfa = 'IDFA' . "\t";
        }

        if (strpos($field, 'keyword') !== false) {
            $f_keyword = '关键词' . "\t";
        }

        echo $f_click_time . $f_adv_active_time . $f_channel_active_time . $f_idfa  . $f_keyword . PHP_EOL;
        for ($i = 0; $i < ceil($sqlCount / $sqlLimit); $i++) {
            $result_data = Db::table($table_name)->where($where)->field($field)->limit($i * $sqlLimit, $sqlLimit)->order('adv_active_time asc')->select();
            foreach ($result_data as $key => $val) {
                $cnt++;
                if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
                    ob_flush();
                    flush();
                    $cnt = 0;
                }
                $click_time = empty($val['click_time']) ? '' : date('Y-m-d H:i:s', $val['click_time']) . "\t";
                $adv_active_time = empty($val['adv_active_time']) ? '' : date('Y-m-d H:i:s', $val['adv_active_time']) . "\t";
                $channel_active_time = empty($val['channel_active_time']) ? '' : date('Y-m-d H:i:s', $val['channel_active_time']) . "\t";
                echo $click_time . $adv_active_time . $channel_active_time . $val['idfa'] . "\t" . $val['keyword'] . PHP_EOL;
            }
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值