浅析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网上调查系统
Oct 09 PHP
php 处理上百万条的数据库如何提高处理查询速度
Feb 08 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
Jun 27 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
php生成不重复随机数、数组的4种方法分享
Mar 30 PHP
php中 ob_start等函数截取标准输出的方法
Jun 22 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
php下载文件,添加响应头的简单实例
Sep 22 PHP
自制PHP框架之设计模式
May 07 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 PHP
php使用event扩展的io复用测试的示例
Oct 20 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&amp;MYSQL分页原理及实现
2007/01/02 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
php设计模式之适配器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
JSON 教程 json入门学习笔记
2020/09/22 Javascript
javascript如何判断输入的url是否正确
2014/04/11 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
JavaScript判断一个字符串是否包含指定子字符串的方法
2015/03/18 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
javascript引用类型指针的工作方式
2015/04/13 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
解析如何利用iframe标签以及js制作时钟
2016/12/08 Javascript
原生js二级联动效果
2017/06/20 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
原生JS实现的轮播图功能详解
2018/08/06 Javascript
Vue加载json文件的方法简单示例
2019/01/28 Javascript
js回文数的4种判断方法示例
2019/06/04 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
预备党员思想汇报范文
2013/12/29 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
小学教学随笔感言
2014/02/26 职场文书
房产继承公证书
2014/04/09 职场文书
学校交通安全责任书
2014/08/25 职场文书
学位证书委托书
2014/09/30 职场文书
旅行社计调工作总结
2015/08/12 职场文书