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文件对于导出大量的数据来 ...
随机推荐
- 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 ...
- springboot启动时控制台不显示映射的URL
背景 今天,第一次使用 2.2.0 版本的springboot,在访问接口时发现访问不到,于是在控制台进行 URL 搜索,发现并相关没有内容 原因 springboot版本差异,切换回 2.0.5.R ...
- testcontainers 基本使用
以下是一个简单的基于testcontainers 的测试(基于java 项目) 预备环境 因为testcontainers 基于docker 运行,所以需要安装docker 引擎 项目准备 项目结构 ...
- win/zabbix_agent.conf
# This is a configuration file for Zabbix agent service (Windows) # To get more information about Za ...
- Spring FrameWork体系结构及模块间依赖关系
详见:https://www.cnblogs.com/ywlaker/p/6136625.html 几个图: (Spring3) (Spring4) 由于Spring体系结构庞大且复杂,为了简化开发者 ...
- Scala Http 请求调用 - scalaj-http
Simplified Http This is a fully featured http client for Scala which wraps java.net.HttpURLConnectio ...
- 批量插入sql技巧
方式一: ); ); 方式二: ), (); 第二种比较好.第二种的SQL执行效率高的主要原因是合并后日志量(MySQL的binlog和innodb的事务让日志)减少了,降低日志刷盘的数据量和频率,从 ...
- 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 ...
- Deep Learning专栏--强化学习之MDP、Bellman方程(1)
本文主要介绍强化学习的一些基本概念:包括MDP.Bellman方程等, 并且讲述了如何从 MDP 过渡到 Reinforcement Learning. 1. 强化学习基本概念 这里还是放上David ...
- C# 删除文件到回收站
首先添加Microsoft.VisualBasic引用 程序中引用 Microsoft.VisualBasic.FileIO 来进行处理 Console.WriteLine("删除文件到回收 ...