//自定义导出字段
$('.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;
}
}
}