PHP导入导出csv文件 Summer-CSV
2017年11月9日09:25:56
根据项目实践总结的一个类文件, mac/win下没乱码
简体中文 默认从gb2312转到utf-8
https://gitee.com/myDcool/PHP-CSV
用法:
// 导入:
$arr = CSV::import($filepath); // 导出:
$data = ['filename' => 'xxx', 'list' => [[xx,xx,x], [xx,xx,x]]];
CSV::export($data);
<?php class CSV
{
public static $csvError = ''; public static function _SetError($error)
{
self::$csvError = $error;
} /**
* 读取csv文件成数组
* @param string $filePath 文件路径
* @return array|bool
*/
public static function import($filePath)
{
setlocale(LC_ALL, 'zh_CN'); if(!file_exists($filePath) || !is_readable($filePath)) {
self::_SetError('文件不存在或者不可读');
return FALSE;
} $rows = array();
$fp = fopen($filePath, 'rb');
while (!feof($fp)) { $row = str_replace(array("\r\n", "\r", "\n"), '', fgets($fp));
$rows[] = explode(',', iconv('GB2312', 'UTF-8', $row)); //简体中文编码转为 utf-8, gbk 兼容gb2312 }
return $rows;
} /**
* 输出 UTF-8 编码的csv文件
* @param array $data ['filename' => 'xxx', 'list' => [[xx,xx,x], [xx,xx,x], ....]]
* @return bool
*/
public static function export($data)
{
if (empty($data['filename']) || empty($data['list'])) {
self::_SetError('缺少参数filename/list');
return FALSE;
}
$filename = $data['filename']; //文件名 header("Expires: 0");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
// 强制下载
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
// disposition / encoding on response body
header("Content-Disposition: attachment;filename={$filename}");
header("Content-Transfer-Encoding: binary"); //设置utf-8 + bom ,处理汉字显示的乱码
echo(chr(0xEF).chr(0xBB).chr(0xBF)); //打开输出缓存
ob_start(); //打开输出流
$df = fopen("php://output", 'w'); //数据写入缓存
foreach ($data['list'] as $row) {
foreach ($row as $k => $v) {
is_numeric($v) && ($row[$k] .= "\t"); //防止变为科学计数法显示
}
fputcsv($df, $row);
} fclose($df);
echo ob_get_clean();
exit;
}
}
PHP导入导出csv文件 Summer-CSV的更多相关文章
- Python与CSV文件(CSV模块)
Python与CSV文件(CSV模块) 1.CSV文件 CSV(逗号分隔值)格式是电子表格和数据库最常用的导入和导出格式.没有“CSV标准”,因此格式由许多读写的应用程序在操作上定义.缺乏标准意味 ...
- MYSQL导入导出.sql文件
MYSQL导入导出.sql文件 一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中p ...
- 【转】 (C#)利用Aspose.Cells组件导入导出excel文件
Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...
- (C#)利用Aspose.Cells组件导入导出excel文件
Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...
- Orcle导入导出dmp文件
--Orcle导入导出dmp文件 --------------------------2013/12/06 导出表: exp scott/tiger@mycon tables=(dept,emp) ...
- oracle导入导出 dmp文件
oracle导入导出 dmp文件: 打开cmd窗口,在cmd窗口下,按照个人需要输入以下对应的命令: 1.imp 用户名/密码@网络服务名 file=XXX.dmp fromuser=XXX tous ...
- Python之文件读写(csv文件,CSV库,Pandas库)
前言 一.Python文件读取 二.读取CSV文件 一.Python文件读取 1. open函数是内置函数之with操作 - 关于路径设置的问题斜杠设置成D:\\文件夹\\文件或是D:/文件夹/文件 ...
- Python的csv文件(csv模块)和ini文件(configparser模块)处理
Python的csv文本文件(csv模块)和ini文本文件(configparser模块)处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.csv文件 1>.CSV文件 ...
- ASP.NET Core导入导出Excel文件
ASP.NET Core导入导出Excel文件 希望在ASP.NET Core中导入导出Excel文件,在网上搜了一遍,基本都是使用EPPlus插件,EPPlus挺好用,但商用需要授权,各位码友若有好 ...
- C# CSV文件的导入导出以及datatable转化csv
1.csv文件写入操作 首先,创建datatable对象: DataTable dt = new DataTable(); 添加列: dt.Columns.Add("name", ...
随机推荐
- Http状态码解释
参考:urllib与urllib2的学习总结(python2.7.X) # Table mapping response codes to messages; entries have the # f ...
- Image转Base64
今天和一个朋友联调图片转Base64时发现一个问题 public static string ImageToBase64(Image img) { BinaryFormatter binFormatt ...
- Java8新特性_stream API 练习
交易员类 public class Trader { private String name; private String city; public Trader() { } public Trad ...
- ASP.NET Web API 2 消息处理管道
Ø 前言 ASP.NET 的应用程序都会有自己的消息处理管道和生命周期,比如:ASP.NET Web 应用程序(Web Form).ASP.NET MVC,还有本文将讨论的 ASP.NET Web ...
- LOJ #2547 Luogu P4517「JSOI2018」防御网络
好像也没那么难写 LOJ #2547 Luogu P4517 题意 在一棵点仙人掌中等概率选择一个点集 求选出点集的斯坦纳树大小的期望 定义点仙人掌为不存在一个点在多个简单环中的连通图 斯坦纳树为在原 ...
- mongodb 系列 ~ mongo的两种引擎介绍对比
一 简介 两种引擎方式的对比二 对比与说明 1 版本支持 MMAP引擎 3.2版本之前,默认引擎 WT 引擎 3.2版本之后,默认引擎 2 并发性能(核心) M ...
- zabbix系列 ~ 报警模式
一 简介:聊聊zabbix的报警方式二 报警方式 邮件,短信,钉钉,微信三 准备 需要预选准备好对应报警方式的脚本四 web端设置 1 设置报警方式 2 设置报警触发器 1 选择报警信息 ...
- JAVA锁和volatile的内存语义&volatile的使用场景
JAVA锁的内存语义 当线程释放锁时,JMM(Java Memory Model)会把该线程对应的本地内存中的共享变量刷新到主内存中. 当线程获取锁时,JMM会将该线程对应的本地内存置为无效.从而使得 ...
- ARM核心板_迅为imx6工控核心板_核心板中的小新潮
ARM核心板_迅为imx6工控核心板_核心板中的小新潮核心板参数 尺寸 51mm*61mm CPU Freescale Cortex-A9 四核 i.MX6Q,主频 1.2 GHz 内存 2GB DD ...
- MySql cmd下的学习笔记 —— 有关建立数据库的操作(连接Mysql,建立数据库,删除数据库等等)
(01) 连接数据库 mysql -uroot -p 之后输入密码 ******.(由于我的密码设置的是111,所以输入的是111) (02) 退出数据库 exit (03) 查看数据库 show d ...