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并打包压缩的更多相关文章

  1. 导出数据之CSV

    平常开发中,常见的需求就是导出数据为Excel,CSV格式的表格.所以,在此记录一下导出CSV数据的小方法 $fileName = 'demo.csv'; $data = [ ['id'=>1, ...

  2. mongodb远程数据库的连接以及备份导入导出数据

    环境win10; 运行cmd cd到目录mongodb的bin目录: 连接远程mongodb: 连接命令:mongo -u username -p pwd host:post/database(数据库 ...

  3. mysql命令行导入和导出数据

    首先打开命令窗口,输入命令:mysql -h localhost -u selffabu -p 连接成功后,进行下面的操作 MySQL中导出CSV格式数据的SQL语句样本如下: select * fr ...

  4. PHP导出数据到CSV文件函数 csv_export()

    后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...

  5. PHP导出数据到CSV文件函数/方法

    如果不清楚什么是CSV文件,可看如下文章介绍  CSV格式的是什么文件?CSV是什么的缩写? /** * 导出数据到CSV文件 * @param array $data 数据 * @param arr ...

  6. PHP导出数据到CSV文件

    后台往往需要导出各种数据到 Excel文档中.通常我们是导出 .csv文件格式,PHP导出函数参考代码如下: /** * 导出数据到CSV文件 * * @param array $data 二维数组( ...

  7. Sqlite 命令行导出、导入数据(直接支持CSV)

    打开命令行 导出数据到data.csv D:\project>sqlite3.exe old.db SQLite version 3.21.0 2017-10-24 18:55:49 Enter ...

  8. PHP csv导出数据

    全部导出和时间导出 html代码,全程并不需要引用什么插件 <include file="public@header"/> <link href="__ ...

  9. php导出数据到csv

    序言 php导出数据到csv是一种很常见的功能,且csv相比于excel文件有其一定的优势,首先csv对数据的行数没有限制,但是excel对数据的行数有一定的限制,因此,csv文件对于导出大量的数据来 ...

随机推荐

  1. LeetCode 669. Trim a Binary Search Tree修剪二叉搜索树 (C++)

    题目: Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so th ...

  2. springboot启动时控制台不显示映射的URL

    背景 今天,第一次使用 2.2.0 版本的springboot,在访问接口时发现访问不到,于是在控制台进行 URL 搜索,发现并相关没有内容 原因 springboot版本差异,切换回 2.0.5.R ...

  3. testcontainers 基本使用

    以下是一个简单的基于testcontainers 的测试(基于java 项目) 预备环境 因为testcontainers 基于docker 运行,所以需要安装docker 引擎 项目准备 项目结构 ...

  4. win/zabbix_agent.conf

    # This is a configuration file for Zabbix agent service (Windows) # To get more information about Za ...

  5. Spring FrameWork体系结构及模块间依赖关系

    详见:https://www.cnblogs.com/ywlaker/p/6136625.html 几个图: (Spring3) (Spring4) 由于Spring体系结构庞大且复杂,为了简化开发者 ...

  6. Scala Http 请求调用 - scalaj-http

    Simplified Http This is a fully featured http client for Scala which wraps java.net.HttpURLConnectio ...

  7. 批量插入sql技巧

    方式一: ); ); 方式二: ), (); 第二种比较好.第二种的SQL执行效率高的主要原因是合并后日志量(MySQL的binlog和innodb的事务让日志)减少了,降低日志刷盘的数据量和频率,从 ...

  8. Eclipse JAX-RS (REST Web Services) 2.0 requires Java 1.6 or newer

    pom.xml文件中添加: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins&l ...

  9. Deep Learning专栏--强化学习之MDP、Bellman方程(1)

    本文主要介绍强化学习的一些基本概念:包括MDP.Bellman方程等, 并且讲述了如何从 MDP 过渡到 Reinforcement Learning. 1. 强化学习基本概念 这里还是放上David ...

  10. C# 删除文件到回收站

    首先添加Microsoft.VisualBasic引用 程序中引用 Microsoft.VisualBasic.FileIO 来进行处理 Console.WriteLine("删除文件到回收 ...