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. Fedora增加rc-local服务开机自启项

      最近新装了一台Fedora 30系统,服务已经正常运行起来了,但是偶然发现当我的系统重启后,写在rc.local配置文件里的命令居然没生效,导致我系统重启,但是服务却没有正常运行,后来经过一番查阅 ...

  2. 微信小程序入门笔记

    目录的作用: 1. pages目录: 该目录下存放所有的定义页面 2. utils目录: 该目录下存放定义的一些小功能组件 3. 根目录下app.js文件: 定义小程序对象, 执行小程序生命周期内的各 ...

  3. DVWA CSRF 通关教程

    CSRF 介绍 CSRF,全称Cross-site request forgery,即跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点击恶意链接或者访问包含攻击代码 ...

  4. java 声明并初始化整型变量

    public class Sample { public static void main(String[] args) { int num; num = ; System.out.println(& ...

  5. SpringBoot的ApplicationRunner

    Article1 在开发中可能会有这样的情景.需要在容器启动的时候执行一些内容.比如读取配置文件,数据库连接之类的.SpringBoot给我们提供了两个接口来帮助我们实现这种需求.这两个接口分别为Co ...

  6. ORA-12528: TNS:listener: all appropriate instances are blocking new connections

    Oracle问题:ORA-12528: TNS: 监听程序: 所有适用例程都无法建立新连接 问题原始描述: ORA-12528: TNS:listener: all appropriate insta ...

  7. HTTP之缓存命中

    缓存命中和缓存未命中 ========================摘自<HTTP权威指南>============================== 1.缓存命中和缓存未命中 可以用 ...

  8. session的工作原理与session用法

    一直在使用session存储数据,一直没有好好总结一下session的使用方式以及其工作原理,今天在这里做一下梳理. 这里的介绍主要是基于php语言,其他的语言操作可能会有差别,但基本的原理不变. 1 ...

  9. pandas的使用(4)

    pandas的使用(4)--文件读取和保存

  10. 局域网Linux机器中病毒简单处理 .aliyun.sh 挖矿病毒 ---不彻底

    1. 昨天晚上同事打电话给我说自己的服务器上面的redis无故被清空了,并且查看aof 日志有很多 wget和write指令 一想就是大事不好.局域网中病毒了.. 2. 今天早上到公司忙完一阵简单看了 ...