1、直接浏览器输出(后台使用可用_blank直接跳走):
protected function put_csv($list,$title)
{
set_time_limit(0);//防止超时
//ini_set("memory_limit", "512M");//防止内存溢出
$file_name = "exam".time().".csv";
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename='.$file_name );
header('Cache-Control: max-age=0');
$file = fopen('php://output',"a");
$limit = 100000;
$calc = 0;
foreach ($title as $v){
$tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);
}
fputcsv($file,$tit);
foreach ($list as $v){
$calc++;
if($limit == $calc){
ob_flush();
flush();
$calc = 0;
}
foreach($v as $t){
$tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);
}
fputcsv($file,$tarr);
unset($tarr);
}
unset($list);
fclose($file);
exit();
}
public function daochu()
{
set_time_limit(0);//防止超时
//ini_set("memory_limit", "512M");//防止内存溢出
$headList = array('姓名', '电话', '密码', '新老');
$dataList = Db::table('up_z_old_user')->field('u_name,u_phone,u_pass,u_old')
->page(1,100000)
->select();
$this->put_csv($dataList, $headList);
}
2、ajax直接保存然后返回路径(这个比较全,可以把要转换的字段对应关系做进去)
function exportExcel($file_name1,$file_name2,$title,$list,$status='',$values='')
{
set_time_limit(0);//防止超时
//ini_set("memory_limit", "512M");//防止内存溢出
$date = date('Ymd');
$dir = ROOT_PATH . 'public' . DS . 'excel/' . $date;
if(!file_exists($dir)){
//检查是否有该文件夹,如果没有就创建,并给予最高权限
mkdir($dir, 0700,true);
}
$file_name = $file_name1 . $file_name2 . '.csv';
$path = ("{$dir}/".iconv('UTF-8','gb2312',$file_name));
$file = fopen($path, 'w');
$limit = 100000;
$calc = 0;
foreach ($title as $v){
$tit[] = iconv('UTF-8', 'GB2312//IGNORE',$v);
}
fputcsv($file,$tit);
foreach ($list as $v){
$calc++;
if($limit == $calc){
ob_flush();
flush();
$calc = 0;
}
foreach($v as $kk => $t){
if($status){
if(in_array($kk,$status) && isset($values[$kk][$t]) && $values[$kk][$t]){
$t = $values[$kk][$t];
}
}
$tarr[] = iconv('UTF-8', 'GB2312//IGNORE',$t);
}
fputcsv($file,$tarr);
unset($tarr);
}
unset($list);
fclose($file);
$filePath = 'excel/' . $date . '/' . $file_name;
$result = array( 'code' => 200, 'msg' =>"/".$filePath );
return $result;
}
public function daochu()
{
set_time_limit(0);//防止超时
//ini_set("memory_limit", "512M");//防止内存溢出
if($data){
$cellname = [
'流水单号', '金额', '类型', '订单类型', '支付方式', '用户名称', '用户电话', '时间'
];
$status = ['revenue_type','pay_type','revenue_one_type'];
$values = [
'revenue_type' => [1 => '收入',2 => '退款']
,'pay_type' => [1 => '微信',2 => '支付宝',3 => '银联']
,'revenue_one_type' => [1 => '自营订单',2 => '增补订单',3 => '统购订单',4 => '取消订单']
];
$res = exportExcel('财务流水',date('Ymd'),$cellname,$data,$status,$values);
return json($res);
}else{
return json(['code'=>0,'msg'=>'此条件下无数据']);
}
}