zoukankan      html  css  js  c++  java
  • PHP 实现导出CSV格式文件

    网站常常需要导出数据,常见的有CSV,XLS,XML 等待格式。
    CSV 是较为常见的一种数据格式,由很多个逗号连接,与XLS 格式的数据相比,还是有一定的优势。

    导出数据的两种思路:
    1.当用户触发操作时,在服务器端生成一个可供用户下载的CSV文件。
    2.当用户触发操作时,在客户端通过HTTP头信息与PHP结合,生成一个可供下载的CSV文件。

    第一种实现方式,每一次下载都在服务器端生成一个CSV 文件,如果时间久了,那么服务器上的CSV 文件会越来越多,以后维护起来也不方便。
    第二种实现方式,在没有优化的情况下,如果数据量大一些,那么生成CSV 会很慢,而且有可能由于网络等原因,造成数据丢失。

    第一种方件的简单实现方式:
    <?php 
    $fp=fopen("test.csv",'w+');//生成CSV文件
    $head_title=array('报表名','操作人','导出时间');
    fputcsv($fp,$head_title);//生成报表头,
    fclose($fp);//关闭操作文件


    ?>
    第二种实现方式
    <?php 
    /**
    gzip 压缩
    **/
    function ob_gzip($content)

    if(!headers_sent()&&extension_loaded("zlib") && strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip"))
    {
    $content=StringHelper::Encoding($content,'utf-8','GBK');
    $content = gzencode($content,9);

    header("Content-Encoding: gzip");
    header("Vary: Accept-Encoding");
    header("Content-Length: ".strlen($content));
    }

    return $content;
    }

    function export_csv($data=NULL)


    $down_file='test.csv';
    header("Content-Type: text/csv;charset=utf-8"); 
    header("Content-Disposition: attachment; filename=$down_name"); 
    header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); 
    header('Expires:0'); 
    header('Pragma:public');
    ob_start('ob_gzip');//对输出数据进行压缩,可减少用户下载时候的等待时间
    //ob_start(array(&$this, 'ob_gzip'));

    echo "报表名,操作人,导出时间\n";

    ob_end_flush();//结束压缩


    }

    ?>

    经测试:未使用GZIP原页面数据量大小为 20.61 KB (21,101 字节)
    使用数据压缩后,页面大小为0.23 KB (236 字节)

    作者:念念之间 智慧星球群号:281151953
  • 相关阅读:
    Mongo Windows 基本使用入门
    ASP.NET Web API 使用Swagger使用笔记
    Smtp协议与Pop3协议的简单实现
    详解boost库中的Message Queue .
    Bencode编码解析的C++实现
    pugixml使用教程
    在QT中使用Irrlicht引擎的方法与步骤
    七大查找算法
    java保留小数点两位的4种方法
    [Node] nvm 安装 node 和 npm
  • 原文地址:https://www.cnblogs.com/tdyz/p/2334434.html
Copyright © 2011-2022 走看看