set_time_limit(0);//不对PHP执行时间做限制
$columns = [
'ID', 'Name', 'Phone','Email'//标题
];
$csvFileName = $file_name.date('YmdHis',time()) . '.csv';//文件名称
//设置好告诉浏览器要下载excel文件的headers
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="'. $csvFileName .'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$fp = fopen('php://output', 'a');//打开output流
foreach($columns as $k=> $v){
$head[$k] = iconv('utf-8', 'gbk', $v);//将标题分成一格一格
}
fputcsv($fp, $title);//将数据格式化为CSV格式并写入到output流中
$accessNum = 20000;//从数据库获取总量,假设是一百万
$perSize = 500;//每次查询的条数
$pages = ceil($count / $perSize);
$lastId = 0;
for($i = 1; $i <= $pages; $i++) {
$accessLog = GameModules::ceshiexcel($request->all(),$i);//生成Excel的数据
foreach($accessLog as $key => $value) {
$rowData = [
$value['id'],$value['name'],$value['phone'],$value['email']
];
mb_convert_variables('GBK', 'UTF-8', $rowData);
fputcsv($fp, $rowData);
$lastId = $value->id;
}
unset($accessLog);//释放变量的内存
// 刷新输出缓冲到浏览器
ob_flush();
flush();//必须同时使用 ob_flush() 和flush() 函数来刷新输出缓冲。
}
fclose($fp);
exit();
前阵子有个大量数据导成Excel表格的需求,当时我们项目用的lumen框架,安装了一下lumen里面的Excel扩展,但是相对简单,解决不了客户的需求,后来找了很多例子来看,在此记录一下
最新推荐文章于 2022-11-17 16:54:18 发布
本文介绍了一种使用PHP批量导出CSV文件的方法,通过设置HTTP头部信息使浏览器下载文件,并利用output缓冲区逐步输出大量数据,避免内存溢出。
719

被折叠的 条评论
为什么被折叠?



