php导出数据到多个csv并打包压缩
1.不压缩直接下载
// 测试php导出大量数据到csv
public function actionExportData()
{
// 设置不超时
set_time_limit(0);
// 设置最大可用内存
ini_set('memory_limit', '1024M');
// 设置第一列名标题名称
$columns = ['id', 'username', 'email'];
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="导出数据-'.date('Y-m-d', time()).'.csv"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
// 打开output流
$fp = fopen('php://output', 'a');
// 把变量从UTF-8转成GBK编码
mb_convert_variables('GBK', 'UTF-8', $columns);
// 将数据格式化为CSV格式并写入到output流中
fputcsv($fp, $columns);
foreach (User::find()->select('id, username, email')->where(['status' => 10])->batch(100) as $items) {
foreach ($items as $item) {
$rowData = [
'id' => $item->id,
'username' => $item->username ?: '',
'email' => $item->email ?: '',
];
mb_convert_variables('GBK', 'UTF-8', $rowData);
fputcsv($fp, $rowData);
}
// 刷新输出缓冲区
ob_flush();
flush();
}
fclose($fp);
exit();
}
2.导出成多个文件并打包成zip文件
public function actionZip()
{
// 设置不超时
set_time_limit(0);
// 设置最大可用内存
ini_set('memory_limit', '1024M');
// 设置第一列名标题名称
$columns = ['id', 'username', 'email'];
// 下面以分页形式导出
// 总记录数
$countUser = User::find()->where(['status' => 10])->count();
// 总页数
$pages = ceil($countUser / 200);
$fileArr = [];
for ($i = 0; $i < $pages; $i++) {
if ($i == 0) {
// 打开一个临时文件
$filename = dirname(__DIR__) . '/components/page' . $i . '.csv';
$fileArr[] = $filename;
// 打开一个文件句柄
$fp = fopen($filename, 'w');
// 把变量从UTF-8转成GBK编码
mb_convert_variables('GBK', 'UTF-8', $columns);
fputcsv($fp, $columns);
}
$users = User::find()
->select('id, username, email')
->where(['status' => 10])
->asArray()
->limit(200)
->offset($i * 200)
->all();
foreach ($users as $user) {
mb_convert_variables('GBK', 'UTF-8', $user);
fputcsv($fp, $user);
}
// 刷新输出缓冲区
//ob_flush();
//flush();
// 当已经输出5页的数据时再新建一个文件
if ($i != 0 && $i % 10 == 0) {
// 关闭当前文件
fclose($fp);
// 重新打开一个新文件
// 打开一个临时文件
$filename = dirname(__DIR__) . '/components/page' . $i . '.csv';
$fileArr[] = $filename;
// 打开一个文件句柄
$fp = fopen($filename, 'w');
// 把变量从UTF-8转成GBK编码
mb_convert_variables('GBK', 'UTF-8', $columns);
fputcsv($fp, $columns);
}
if ($i == ($pages - 1)) {
// 如果是最后一页,执行完就关闭文件
fclose($fp);
}
}
// 压缩打包
$zip = new \ZipArchive();
$zipName = dirname(__DIR__) . '/components/' . time() . '.zip';
$zip->open($zipName, \ZipArchive::CREATE);
foreach ($fileArr as $file) {
$zip->addFile($file, basename($file));
}
$zip->close();
foreach ($fileArr as $file) {
unlink($file);
}
header('Content-disposition: attachment; filename=' . basename($zipName));
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: binary");
header('Content-Length: ' . filesize($zipName));
readfile($zipName);
@unlink($zipName);
}
php导出数据到多个csv并打包压缩的更多相关文章
- 导出数据之CSV
平常开发中,常见的需求就是导出数据为Excel,CSV格式的表格.所以,在此记录一下导出CSV数据的小方法 $fileName = 'demo.csv'; $data = [ ['id'=>1, ...
- mongodb远程数据库的连接以及备份导入导出数据
环境win10; 运行cmd cd到目录mongodb的bin目录: 连接远程mongodb: 连接命令:mongo -u username -p pwd host:post/database(数据库 ...
- mysql命令行导入和导出数据
首先打开命令窗口,输入命令:mysql -h localhost -u selffabu -p 连接成功后,进行下面的操作 MySQL中导出CSV格式数据的SQL语句样本如下: select * fr ...
- PHP导出数据到CSV文件函数 csv_export()
后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...
- PHP导出数据到CSV文件函数/方法
如果不清楚什么是CSV文件,可看如下文章介绍 CSV格式的是什么文件?CSV是什么的缩写? /** * 导出数据到CSV文件 * @param array $data 数据 * @param arr ...
- PHP导出数据到CSV文件
后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...
- Sqlite 命令行导出、导入数据(直接支持CSV)
打开命令行 导出数据到data.csv D:\project>sqlite3.exe old.db SQLite version 3.21.0 2017-10-24 18:55:49 Enter ...
- PHP csv导出数据
全部导出和时间导出 html代码,全程并不需要引用什么插件 <include file="public@header"/> <link href="__ ...
- php导出数据到csv
序言 php导出数据到csv是一种很常见的功能,且csv相比于excel文件有其一定的优势,首先csv对数据的行数没有限制,但是excel对数据的行数有一定的限制,因此,csv文件对于导出大量的数据来 ...
随机推荐
- 【oracle】 months_between(date1,date2)
(20090228,20080228)====12 (20090228,20080229)====12 (20080229,20070228)====12 (20100331,20100228)=== ...
- 【JSP】${pageContext.request.contextPath}
取出部署的应用程序名或者是当前的项目名称 http://localhost:8080/demo1/a.jsp ${pageContext.request.contextPath}或<%=req ...
- Linux性能优化实战学习笔记:第四十讲
一.上节回顾 上一节,我们学习了碰到分布式拒绝服务(DDoS)的缓解方法.简单回顾一下,DDoS利用大量的伪造请求,导致目标服务要耗费大量资源,来处理这些无效请求,进而无法正常响应正常用户的请求. 由 ...
- elasticsearch 7.5.0 学习笔记
温馨提示:电脑端看不到右侧目录的话请减小缩放比例. API操作-- 新建或删除查询索引库 新建索引库 新建index,要向服务器发送一个PUT请求,下面是使用curl命令新建了一个名为test的ind ...
- [LeetCode] 415. Add Strings 字符串相加
Given two non-negative numbers num1 and num2 represented as string, return the sum of num1 and num2. ...
- [LeetCode] 25. Reverse Nodes in k-Group 每k个一组翻转链表
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k ...
- 源码解读SLF4J绑定日志实现的原理
一.导读 我们使用log4j框架时,经常会用slf4j-api.在运行时,经常会遇到如下的错误提示: SLF4J: Class path contains multiple SLF4J binding ...
- Elasticsearch由浅入深(五)_version乐观锁、external version乐观锁、partial update、groovy脚本实现partial update
基于_version进行乐观锁并发控制 先构造一条数据出来 PUT /test_index/test_type/ { "test_field": "test test&q ...
- java常量池-字符串常量池、class常量池和运行时常量池
原文链接:http://tangxman.github.io/2015/07/27/the-difference-of-java-string-pool/ 在java的内存分配中,经常听到很多关于常量 ...
- win10下MYSQL的下载、安装以及配置超详解教程(转)
下载MYSQL 官网下载MYSQL5.7.21版本,链接地址https://www.mysql.com/downloads/.下载流程图如下: 进入官网点击Community,下载社区版. 找到MYS ...