php实现百万级数据快速导出CSV
码农天地 -php实现百万级数据导出这里使用了服务器的缓存来实现
实现:
一:建立测试表,并加入测试数据
1:创建测试表
这里我建了一个test表,字段分别为:id,name,age,email
2:加入测试数据
(1)首先手动向表中添加若干行数据
然后执行如下命令批量添加数据
INSERT INTO test (name,age,email) SELECT name,age,email FROM test;
多次执行上面的命令测试数据会呈指数增加,这样就可以得到很多测试数据
二:php实现导出百万级数据(这里我的查询命令使用的时Yii框架自带的查询命令)
//让程序一直运行
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, ['姓名', '岁数', '邮箱']);
$nums = 10000; //每次导出数量
$count = Test::find()->count();
$step = ceil($count/$nums);//循环次数
for($i = 0; $i < $step; $i++) {
$result = Test::find()
->select(['name', 'age', 'email'])
->limit($nums)
->offset($i * $nums)
->asArray()
->all();
foreach ($result as $item) {
fputcsv($fp, $item);
}
//每1万条数据就刷新缓冲区
ob_flush();
flush();
}
exit;
如上测试后可以发现导出一百万左右数据只需十几秒左右时间,效率还算是不错的
参考:https://blog.csdn.net/weixin_...
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。
php介绍
PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。
上一篇: PHP实现动态代理
下一篇: 标梵互动讲解从头构建PHP原生环境