php导出csv数据在浏览器中输出提供下载或保存到文件的示例
来源:http://www.jb51.net/article/49313.htm
1.在浏览器输出提供下载
/**
* 导出数据到CSV文件
* @param array $data 数据
* @param array $title_arr 标题
* @param string $file_name CSV文件名
*/
function export_csv(&$data, $title_arr, $file_name = '') {
ini_set("max_execution_time", "3600");
$csv_data = '';
/** 标题 */
$nums = count($title_arr);
for ($i = 0; $i < $nums - 1; ++$i) {
$csv_data .= '"' . $title_arr[$i] . '",';
}
if ($nums > 0) {
$csv_data .= '"' . $title_arr[$nums - 1] . "\"\r\n";
}
foreach ($data as $k => $row) {
for ($i = 0; $i < $nums - 1; ++$i) {
$row[$i] = str_replace("\"", "\"\"", $row[$i]);
$csv_data .= '"' . $row[$i] . '",';
}
$csv_data .= '"' . $row[$nums - 1] . "\"\r\n";
unset($data[$k]);
}
$csv_data = mb_convert_encoding($csv_data, "cp936", "UTF-8");
$file_name = empty($file_name) ? date('Y-m-d-H-i-s', time()) : $file_name;
if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE")) { // 解决IE浏览器输出中文名乱码的bug
$file_name = urlencode($file_name);
$file_name = str_replace('+', '%20', $file_name);
}
$file_name = $file_name . '.csv';
header("Content-type:text/csv;");
header("Content-Disposition:attachment;filename=" . $file_name);
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');
header('Pragma:public');
echo $csv_data;
}
2.保存到文件
function export_csv($data, $title_arr, $file_name = '') { $csv_data = ''; /** 标题 */
$nums = count($title_arr);
for ($i = 0; $i < $nums - 1; ++$i) {
$csv_data .= '"' . $title_arr[$i] . '",';
} if ($nums > 0) {
$csv_data .= '"' . $title_arr[$nums - 1] . "\"\r\n";
} foreach ($data as $k => $row) {
for ($i = 0; $i < $nums - 1; ++$i) {
$row[$i] = str_replace("\"", "\"\"", $row[$i]);
$csv_data .= '"' . $row[$i] . '",';
}
$csv_data .= '"' . $row[$nums - 1] . "\"\r\n";
unset($data[$k]);
} $file_name = empty($file_name) ? date('Y-m-d-H-i-s', time()) : $file_name;
file_put_contents($file_name, $csv_data) ;
}
调用示例(保存到文件):
$file_name="/var/www/tmp/test.csv" ;
$header = array(
'0' => '参数ID',
'1' => '参数名称',
'2' => '统计次数',
'3' => '统计次数百分比',
'4' => '唯一用户数',
'5' => '唯一用户数百分比',
'6' => '人均次数'
);
$csvList = array(array("111", "title", "12", "100%", "23", "50%", "4")) ;
export_csv($csvList, $header, $file_name) ;
php导出csv数据在浏览器中输出提供下载或保存到文件的示例的更多相关文章
- thinkphp导出csv文件,用表格输出excel
1.thinkphp导出csv文件 导出csv文件可能就那几行代码,今天有个问题困扰我好久,就是导出之后出现一些html代码,这个不应该,view里面是空的,controller中最后也没有$this ...
- Scrapy基础(十二)————异步导出Item数据到Mysql中
异步导出数据到Mysql中 上次说过从Item中同步写入数据库,因为网络的下载速度和数据库的I/O速度是不一样的所以有可能会发生下载快,但是写入数据库速度慢,造成线程的堵塞:关于堵塞和非堵塞,同步和异 ...
- 手写网站服务器~用Python手动实现一个简单的服务器,不借助任何框架在浏览器中输出任意内容
写在前面的一些P话: 在公司网站开发中,我们往往借助于Flask.Django等网站开发框架去提高网站开发效率.那么在面试后端开发工程师的时候,面试官可能就会问到网站开发的底层原理是什么? 我们不止仅 ...
- 数据库数据导出CSV文件,浏览器下载
直接上代码: def download(request): # 从数据库查询数据 data_list = Info.objects.all() # 定义返回对象 response = HttpResp ...
- node.js 浏览器中输出 “hello world”
前段时间花了几个小时,在command面板输出了“hello world”,今天就来说说怎么在浏览器上输入一个地址,然后页面输出“hello world”. 首先要搭建一个基础的 HTTP 服务器 一 ...
- mac中导出CSV格式在excel中乱码
1 - 首先需要查看文档的编码格式: 安装enca: brew install enca 使用命令 enca file路径即可查到文件的编码格式 Universal transformation ...
- JS在浏览器中输出各种三角形
直角三角形 <script type="text/javascript"> for(var i=1;i<=8;i++){ for(var j=1;j<=i; ...
- 使用Python中的log模块将loss输出到终端与保存到文件
记得之前对深度学习中得loss输出,经常自己会将输出流重新定向到一个文件中, 比如 python main.py > & | tee log.txt 对于caffe这种c++框架而言,用 ...
- 在浏览器中从FTP下载文件
public static class FTPHelper { /// <summary> /// 得到特定FTP目录的文件列表 /// </summary> /// < ...
随机推荐
- iOS - 全屏滑动
取经地址 1.使用关联 关联是指把两个对象相互关联起来,使得其中的一个对象作为另一个对象的一部分. 使用关联,是基于关键字的,因此,我们可以为任意对象增加任意多的关联,但是关键字是唯一的.关联可以保证 ...
- NOIp 0904 出题报告
T1 huajitree 纯模拟,把S拆成二进制查一下有多少个1,然后把这个数和N*M求一下gcd,除一下输出就好了.说求期望值可能对新高一不太友好…. //huajitree //2016.8.22 ...
- Raspberry Pi 3 --- Kernel Building and Run in A New Version Kernal
ABSTRACT There are two main methods for building the kernel. You can build locally on a Raspberry Pi ...
- mac系统的一些操作常识
mac系统如何显示和隐藏文件 苹果Mac OS X操作系统下,隐藏文件是否显示有很多种设置方法,最简单的要算在Mac终端输入命令.显示/隐藏Mac隐藏文件命令如下(注意其中的空格并且区分大小写): 显 ...
- “我是谁?”-管理者的角色、职责与工作思路.ppt
http://doc.mbalib.com/view/95b6a675adeaf38a2c028bd4f53f0bf6.html 管理者的三大工作重心: 任务(目标).团队.规划.
- (总结)Nginx配置文件nginx.conf中文详解
#定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | ...
- Java多线程系列
一.参考文献 1.:Java多线程系列目录 (一) 基础篇 01. Java多线程系列--“基础篇”01之 基本概念 02. Java多线程系列--“基础篇”02之 常用的实现多线程的两种方式 03. ...
- Mastering C# structs
http://www.developerfusion.com/article/84519/mastering-structs-in-c/
- Sencha Touch 2.2 Store Proxy 异常监控
移动端到服务端通信往往会发生很多莫名的异常情况,如何有效的监控proxy异常,给用户友好的用户体验呢? Proxy给我提供了异常exception的监听事件,只需要监控该项目即可. Sencha To ...
- python 基本数据类型分析
在python中,一切都是对象!对象由类创建而来,对象所拥有的功能都来自于类.在本节中,我们了解一下python基本数据类型对象具有哪些功能,我们平常是怎么使用的. 对于python,一切事物都是对象 ...