在PHP的日常开发中,时常会需要导出 excel ,一般我们会使用 PHPExcel ,性能强大,但是在数据量大的时候,phpexcel 性能差、内存溢出等各种不可控问题就会出现。因此,如果对导出样式要求不高,我们可以使用 php 原生的 fputcsv 导出表格,最近项目中,有同事就遇到这个问题,推荐他使用 fputcsv,本着分享的精神,在此记录,希望能够帮助一些新入行的童鞋。

直接上代码:

<?php
ob_end_clean(); // 文件名
$filename = $type.'_order_'.date('YmdHis').'.csv';
$title = ['单号', '状态', '数量', '商品名', '发货人', '收货人']; // 设置 header 头
header('Content-Type: application/vnd.ms-excel'); // 文件格式
header('Content-Type: charset=utf-8'); // 文件编码
header('Content-Disposition: attachment; filenaeme='. $filename); // 文件名
header('Content-Type: application/octet-stream'); // 二进制流
// header("Accept-Ranges:bytes");// 表明范围单位为字节,可不写
header("Pragma: no-cache"); // 禁止缓存
header("Expires: 0");// 有效期时间 $fp = fopen('php://output','w+'); fputcsv($fp, transCode($title)); // 处理数据 [伪代码]
// 如果从数据库获取数据并处理,可以分批进行查询,也可以使用多个文件进行导出
// $result $count = 0; //计数器
$limit = 10000; while ($row = $result->fetchRow()) {
$count++;
if ($count == $limit) {
ob_flush(); // 刷新 php 缓存
flush(); // 刷新输出缓存
$count = 0; // 重置计数器
} // 逐行写入
fputcsv($fp, transCode($row));
unset($row);
} fclose($fp);
// 编码转换
// 代码一般是 utf-8 格式, csv 导出默认也是 utf-8 格式,而 excel 直接打开默认不识别 utf-8 格式,因此,要导出数据都要进行 格式转换
// 每个字段后加上 "\t" 可以防止长数字显示为科学计数法
function transCode(array &$arr){
foreach ($arr as &$v) {
$v = "\t".iconv('utf-8', 'gb2312//ignore', $v);
}
}

可能出现问题:
乱码问题:转换编码为 gb2312 或 gbk
特殊字符问题:字段后 加 "\t" 或 双引号
数据丢失问题:gb2312 可识别的字符比较少,可以换成 gbk
csv 时间格式筛选: 文本格式的时间无法进行分组筛选,可在 转码的时候进行过滤,如果是时间格式,不转成 文本格式,即 不加 "\t"

文章来源:https://blog.51cto.com/12750968/2133076

最新文章

  1. Oracle dbms_lock.sleep()存储过程使用技巧-场景-分析-实例
  2. html table单双行颜色间隔(转载)
  3. css3 切换贞动画的效果,仿gif效果
  4. 谷歌浏览器支持小于12px的字体
  5. 关于html控件和服务器控件摁回车后提交按钮的问题
  6. SpringMVC数据绑定
  7. 转载:MAT Memory Analyzer Tool使用示例
  8. Oracle改动字段类型和长度
  9. C#多线程编程(1)--线程,线程池和Task
  10. tp框架-----文件上传
  11. CTBS问题百科
  12. 2019-中小型公司PHP面试题目记录(附带答案)
  13. IOS不支持iframe的解决办法
  14. 部署springboot工程到linux上及遇到的坑
  15. Python中的常用魔术方法介绍
  16. SQL FULL JOIN 关键字
  17. (32)forms组件(渲染自建规则:局部钩子函数和全局钩子函数)
  18. java多线程快速入门(四)
  19. Beta阶段第四篇Scrum冲刺博客-Day3
  20. jmeter—打开jmx报com.thoughtworks.xstream.converters.ConversionException

热门文章

  1. Git的使用(5) —— 在IDEA上使用
  2. html常用标签详解
  3. Qt *.pro工程文件 详解
  4. CENTOS7安装OPENSSL
  5. posh-git
  6. js实现replaceAll方法
  7. keepalived vip removed with dhcp renewal【原创】
  8. postgresQL 服务器端守护进程
  9. Vue-CLI 标准开发工具-快速准备环境和创建项目
  10. VS2019,打开项目之后显示:System.NullReferenceException: 未将对象引用设置到对象的实例