PHP-php 百万条数据一键下载格式为csv如何设计

发布于 2017-02-04 01:37:52 字数 40 浏览 1145 评论 5

如题! 要求是及时的,不能事先生成。得有效率呀,各位各抒己见!3q

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

夜无邪 2017-05-26 23:13:01

<?php
set_time_limit(0);
header('Content-Encoding: gzip');
header('Content-type: application/gz');
header('Content-Disposition: attachment; filename=test.csv.gz');
//header('Content-Length: 1024'); // 这里根据实际情况修改,不加时在下载时不显示总文件大小,但要注意导出内容大小与这里设置要一致,也是经过gzip压缩后的大小
for ($i = 0; $i < 100; $i++) {
$content = gzencode(str_repeat($i, 100000) . "n");
echo $content;
ob_flush();
flush();
}

又加入了 gzip 压缩,速度会更快一些

瑾兮 2017-05-20 05:45:08

我之前做过这个,首先是 把脚本运行时间设置0
set_time_limit(0);
ignore_user_abort(0);

接着就开始分段检索数据记录 ,比如原始sql是 select * from tt

此处就要计划好分片规则,首先计算出总行数,假设是 100w,比如 每次取 500条,那么 要循环的次数就是 100w/500

然后对每次进行分批处理,

此处给出一个辅助类

// 数据导出组件
final class SimpleDataExport {

static function generateResponseHeader($filename,$charset='UTF-8',$mimeType = 'application/octet-stream'){
header("Pragma: public"); header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: {$mimeType}; charset={$charset}");
header("Content-Transfer-Encoding: binary");
header(Core_AppUtils::getContentDispositionHeader($_SERVER["HTTP_USER_AGENT"],$filename,'attachment',$charset));
}

}
/**
* 简易 cvs 数据导出类
*
*/
class SimpleCvsExport {

static function generateXlsHeader($filename){
SimpleDataExport::generateResponseHeader($filename,'utf-8','text/csv');
echo(chr(0xEF).chr(0xBB).chr(0xBF));
}

static function writeRow(array $row){
echo implode(',',$row) . PHP_EOL;
}
}

夜无邪 2017-04-26 21:14:10

各位大能求帮。!球棒啊!

想挽留 2017-04-04 23:40:02

CSV文件就是个文本文件,而且是按行来写的。所以你只要将查询的结果集不断写出去,再批量的flush,客户端就会源源不断的接收到这个文件。

甜柠檬 2017-02-07 01:34:06

就跟正常写的text或者word文件一样吧。 将结果集一行行写完?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文