导出数据 demo
以导出 100 万条数据为例:
public function export()
{
//让程序一直运行
set_time_limit(0);
//设置程序运行内存
ini_set('memory_limit', '128M');
$fileName = '测试导出数据';
header('Content-Encoding: UTF-8');
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
//打开php标准输出流
$fp = fopen('php://output', 'a');
//添加BOM头,以UTF8编码导出CSV文件,如果文件头未添加BOM头,打开会出现乱码。
fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));
//添加导出标题
fputcsv($fp, ['ID', 'VALUE']);
$step = 100; //循环次数
$nums = 10000; //每次导出数量
for ($i = 0; $i < $step; $i++) {
$start = $i * $nums;
$result = $this->table('m_test')
->offset($start)
->limit($nums)
->get();
foreach ($result as $item) {
fputcsv($fp, [$item->id,$item->value]);
}
//每1万条数据就刷新缓冲区
ob_flush();
flush();
}
}
CSV 导出说明
CSV 格式文件最大行数是没有上限的,在国外科学数据网站下载的 CSV 文件有几十 G上百 G,行数多大几十亿上百亿行;但是大文件 CSV 打开编辑的软件就基本没有,Excel、WPS、OpenOffice 仅支持打开编辑前面 1048576 行;Snapde 软件支持的行数多一些,一次可以打开编辑一两千万行的 CSV 数据,速度很快。
为什么不用 Excel 导出?
fputcsv() 要比PHPExcel好很多;因为 CSV 文件较小,CSV 文件数据可存放数量可大可小,CSV 生成不占用大量 CPU 和时间,而 Excel 的生成时间随着文件数据量的增加成而所需时间越多。
更多精彩内容:各种AI课程、技能课程、黑科技软件、网站小程序源码、副业小项目、PPT模板等精品素材、电商课程、推广引流课程等,尽在 天边资源网 。