浅析PHP数据导出知识点


Posted in PHP onFebruary 17, 2018

最近在做后台管理的项目,后台通常有数据导出到 excel 的需要,经过之前搜索通常推荐使用的是 php excel ,我经常使用的是 laravel ,对于 php excel 也有很好用的对应 package。

开始使用是非常好用的,但是当需要导出的数据达到上万条时就直接带来内存不足的问题。

然后我找到了几个解决方案。

前端解决方案

PHP配合SheetJS/js-xlsx导出Excel大量数据

这个方案好处的不需要额外的接口,但是要依赖于前端开发者。

导出成 csv

该方案速度较快,完全后端实现,缺点是 csv 格式对导出的形式要求比较高,要求是纯数据,不能存在图片之类的富文本形式。

下面主要介绍一下导出 csv 的方式

php 官方文档 的介绍

<?php

$list = array (
  array('aaa', 'bbb', 'ccc', 'dddd'),
  array('123', '456', '789'),
  array('"aaa"', '"bbb"')
);

$fp = fopen('file.csv', 'w');

foreach ($list as $fields) {
  fputcsv($fp, $fields);
}

fclose($fp);
?>

导出完整例子

<?php

$name = 'test';
header ( "Content-type:application/vnd.ms-excel" );
header ( "Content-Disposition:filename=".$name.".csv" );
header ('Cache-Control: max-age=0');

//打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');  

// 写入BOM头,防止乱码
fwrite($fp, chr(0xEF).chr(0xBB).chr(0xBF)); 

// 生成的测试数据
function test()
{
  for ($i=0; $i < 150000; $i++) {
    yield ['name', $i, '男'];
  }
}

// 表头
$headers = ['名字', '年龄', '性别'];

fputcsv($fp, $headers);

foreach (test() as $value) {
  fputcsv($fp, $value);
}

fclose($fp);
?>

在 laravel 中配合 chunk 使用可以方便快速导出全部数据。

以上就是本次知识点的全部内容,感谢大家对三水点靠木的支持。

PHP 相关文章推荐
PHP XML操作类DOMDocument
Dec 16 PHP
php 日期时间处理函数小结
Dec 18 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
Nov 02 PHP
PHP连接MongoDB示例代码
Sep 06 PHP
PHP错误和异长常处理总结
Mar 06 PHP
php GUID生成函数和类
Mar 10 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
理解php依赖注入和控制反转
May 11 PHP
Zend Framework上传文件重命名的实现方法
Nov 25 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 PHP
PDO实现学生管理系统
Mar 21 PHP
PHP 应用容器化以及部署方法
Feb 12 #PHP
PHP使用Redis长连接的方法详解
Feb 12 #PHP
PHP长连接实现与使用方法详解
Feb 11 #PHP
搜索附近的人PHP实现代码
Feb 11 #PHP
PHP的RSA加密解密方法以及开发接口使用
Feb 11 #PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 #PHP
PHP实现的多维数组排序算法分析
Feb 10 #PHP
You might like
让PHP支持断点续传的源码
2010/05/16 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
Jquery submit()无法提交问题
2013/04/21 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
vue-resource请求实现http登录拦截或者路由拦截的方法
2018/07/11 Javascript
解决layui页面按钮点击无反应,也不报错的问题
2019/09/29 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
vue项目中使用bpmn-自定义platter的示例代码
2020/05/11 Javascript
python的else子句使用指南
2016/02/27 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
编辑求职信样本
2013/12/16 职场文书
农业资源与环境专业自荐信范文
2013/12/30 职场文书
《火烧云》教学反思
2014/04/12 职场文书
社区灵活就业证明
2014/11/03 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
民事上诉状范文
2015/05/22 职场文书
python中如何对多变量连续赋值
2021/06/03 Python
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
vue选项卡切换的实现案例
2022/04/11 Vue.js