PHP导入导出csv文件-阿里云开发者社区

开发者社区> mydcool> 正文

PHP导入导出csv文件

简介: 2017年11月9日09:25:56 根据项目实践总结的一个类文件, mac/win下没乱码 简体中文 默认从gb2312转到utf-8 https://gitee.com/myDcool/PHP-CSV   用法: 1 // 导入: 2 $arr = CSV::import($f...
+关注继续查看

2017年11月9日09:25:56

根据项目实践总结的一个类文件, mac/win下没乱码

简体中文 默认从gb2312转到utf-8

https://gitee.com/myDcool/PHP-CSV

 

用法:

1 // 导入:
2 $arr = CSV::import($filepath);
3 
4 // 导出:
5 $data = ['filename' => 'xxx', 'list' => [[xx,xx,x], [xx,xx,x]]];
6 CSV::export($data);

 

 1 <?php
 2 
 3 class CSV
 4 {
 5     public static $csvError = '';
 6     
 7     public static function _SetError($error)
 8     {
 9         self::$csvError = $error;
10     }
11     
12     /**
13      * 读取csv文件成数组
14      * @param string $filePath 文件路径
15      * @return array|bool
16      */
17     public static function import($filePath)
18     {
19         setlocale(LC_ALL, 'zh_CN');
20     
21         if(!file_exists($filePath) || !is_readable($filePath)) {
22             self::_SetError('文件不存在或者不可读');
23             return FALSE;
24         }
25     
26         $rows = array();
27         $fp = fopen($filePath, 'rb');
28         while (!feof($fp)) {
29         
30             $row = str_replace(array("\r\n", "\r", "\n"), '', fgets($fp));
31             $rows[] = explode(',', iconv('GB2312', 'UTF-8', $row)); //简体中文编码转为 utf-8, gbk 兼容gb2312
32         
33         }
34         return $rows;
35     }
36     
37     /**
38      * 输出 UTF-8 编码的csv文件
39      * @param array $data  ['filename' => 'xxx', 'list' => [[xx,xx,x], [xx,xx,x], ....]]
40      * @return bool
41      */
42     public static function export($data)
43     {
44         if (empty($data['filename']) || empty($data['list'])) {
45             self::_SetError('缺少参数filename/list');
46             return FALSE;
47         }
48         $filename = $data['filename']; //文件名
49     
50         header("Expires: 0");
51         header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
52         // 强制下载
53         header("Content-Type: application/force-download");
54         header("Content-Type: application/octet-stream");
55         header("Content-Type: application/download");
56         // disposition / encoding on response body
57         header("Content-Disposition: attachment;filename={$filename}");
58         header("Content-Transfer-Encoding: binary");
59     
60         //设置utf-8 + bom ,处理汉字显示的乱码
61         echo(chr(0xEF).chr(0xBB).chr(0xBF));
62     
63         //打开输出缓存
64         ob_start();
65     
66         //打开输出流
67         $df = fopen("php://output", 'w');
68     
69         //数据写入缓存
70         foreach ($data['list'] as $row) {
71             foreach ($row as $k => $v) {
72                 is_numeric($v) && ($row[$k] .= "\t"); //防止变为科学计数法显示
73             }
74             fputcsv($df, $row);
75         }
76     
77         fclose($df);
78         echo ob_get_clean();
79         exit;
80     }
81 }
View Code

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
来更快的Maven了,我的天,速度提升了8倍!(1)
更快的Maven来了,我的天,速度提升了8倍!(1)
26 0
Spring Boot Admin,贼好使!(7)
Spring Boot Admin,贼好使!(7)
16 0
Chrome_Browse
亮点介绍 1、使web项目通过Chrome_Browse调用各种硬件; 2、使web项目通过Chrome_Browse控制缓存; 3、使web项目通过Chrome_Browse控制PC权限(通f过获取CPU、硬盘的编号可以与后台数据库交互进行鉴权); 4、其他更多的与windows交互的功能;
9 0
从托管到原生,MPP架构数据仓库的云原生实践
本文介绍了云原生数据仓库产品AnalyticDB PostgreSQL从Cloud-Hosted到Cloud-Native的演进探索,探讨为了实现真正的资源池化和灵活售卖的底层设计和思考,涵盖内容包括产品的架构设计,关键技术,性能结果,效果实现和后续计划几方面。
10 0
Bootstrap 起步|学习笔记
快速学习 Bootstrap 起步
4 0
SpringBoot时间格式化的5种方法!(3)
SpringBoot时间格式化的5种方法!(3)
6 0
详解使用VueJS开发项目中的兼容问题
详解使用VueJS开发项目中的兼容问题
11 0
前后端分离 -- 深入浅出 Spring Boot + Vue 实现工程项目进度管理系统 Vue不过如此~
前后端分离 -- 深入浅出 Spring Boot + Vue 实现工程项目进度管理系统 Vue不过如此~
5 0
+关注
mydcool
php相关专家
287
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载