php导出csv数据在浏览器中输出提供下载或保存到文件的示例


Posted in PHP onApril 24, 2014

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 相关文章推荐
基于文本的留言簿
Oct 09 PHP
在字符串中把网址改成超级链接
Oct 09 PHP
PHP实现用户认证及管理完全源码
Mar 11 PHP
ini_set的用法介绍
Jan 07 PHP
两个php日期控制类实例
Dec 09 PHP
php简单实现快速排序的方法
Apr 04 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
Jun 03 PHP
PHP中的流(streams)浅析
Jul 02 PHP
PHP缓冲区用法总结
Feb 14 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
php+ajax实现仿百度查询下拉内容功能示例
Oct 20 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
Apr 24 #PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
Apr 24 #PHP
php获取中文拼音首字母类和函数分享
Apr 24 #PHP
PHP获取浏览器信息类和客户端地理位置的2个方法
Apr 24 #PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 #PHP
php计算当前程序执行时间示例
Apr 24 #PHP
php实现的百度搜索某地天气的小偷代码
Apr 23 #PHP
You might like
简单的PHP留言本实例代码
2010/05/09 PHP
PHP中header和session_start前不能有输出原因分析
2013/01/11 PHP
CodeIgniter实现从网站抓取图片并自动下载到文件夹里的方法
2015/06/17 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
如何让PHP编码更加好看利于阅读
2019/05/12 PHP
JavaScript 精粹读书笔记(1,2)
2010/02/07 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
jQuery实现二级下拉菜单效果
2016/01/05 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
Vue引入jquery实现平滑滚动到指定位置
2018/05/09 jQuery
微信运维交互机器人的示例代码
2018/11/12 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
一个基于flask的web应用诞生 bootstrap框架美化(3)
2017/04/11 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
python实现车牌识别的示例代码
2019/08/05 Python
在django中查询获取数据,get, filter,all(),values()操作
2020/08/09 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
小学三八妇女节活动方案
2014/03/16 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
同事去世追悼词
2015/06/23 职场文书
高一英语教学反思
2016/03/03 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
Pytest中skip skipif跳过用例详解
2021/06/30 Python
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers