10万数据快速导出php,php实现百万级数据快速导出CSV

php实现百万级数据导出这里使用了服务器的缓存来实现php

实现:缓存

一:创建测试表,并加入测试数据服务器

1:建立测试表app

这里我建了一个test表,字段分别为:id,name,age,email框架

2:加入测试数据测试

(1)首先手动向表中添加若干行数据编码

而后执行以下命令批量添加数据.net

INSERT INTO test (name,age,email) SELECT name,age,email FROM test;

屡次执行上面的命令测试数据会呈指数增长,这样就能够获得不少测试数据excel

二:php实现导出百万级数据(这里个人查询命令使用的时Yii框架自带的查询命令)code

//让程序一直运行

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;

如上测试后能够发现导出一百万左右数据只需十几秒左右时间,效率还算是不错的

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值