php 导出CSV格式数据

 /**
     *
     * 导出数据.csv格式
     */
    public function export()
    {
        set_time_limit(0);
        ini_set('memory_limit', '128M');

        $fileName = date('YmdHis', time());
        header('Content-Encoding: UTF-8');
        header("Content-type:application/vnd.ms-excel;charset=UTF-8");
        header('Content-Disposition: attachment;filename="' . $fileName . '.csv"');
        //注意,数据量在大的情况下。比如导出几十万到几百万,会出现504 Gateway Time-out,请修改php.ini的max_execution_time参数
        //打开php标准输出流以写入追加的方式打开
        $fp = fopen('php://output', 'a');
        //连接数据库
        $dbhost = '127.0.0.1';
        $dbuser = 'root';
        $dbpwd = 'root';
        $con = mysqli_connect($dbhost, $dbuser, $dbpwd);
        if (mysqli_connect_errno())
            die('connect error');

        $database = 'sys';//选择数据库
        mysqli_select_db($con, $database);
        mysqli_query($con, "set names UTF8");//如果需要请设置编码

        //用fputcsv从数据库中导出1百万的数据,比如我们每次取1万条数据,分100步来执行
        //一次性读取1万条数据,也可以把$nums调小,$step相应增大。
        $step = 100;
        $nums = 10000;
        $where = "where 1=1"; //筛选条件,可自行添加

        //设置标题
        $title = array('记录id', '订单编号', '买家uid', '买家账号','游戏标识','游戏名称'); //注意这里是小写id,否则ID命名打开会提示Excel 已经检测到"xxx.xsl"是SYLK文件,但是不能将其加载: CSV 文或者XLS文件的前两个字符是大写字母"I","D"时,会发生此问题。
        foreach ($title as $key => $item)
            $title[$key] = iconv("UTF-8", "GB2312//IGNORE", $item);

        fputcsv($fp, $title);

        for ($s = 1; $s <= $step; $s++) {
            $start = ($s - 1) * $nums;
            $result = mysqli_query($con, "SELECT id,order_num,purchaser_uid,purchaser_username,game_id,game_name FROM `charge_order` " . $where . " ORDER BY `ID` LIMIT {$start},{$nums}");
            if ($result) {
                while ($row = mysqli_fetch_assoc($result)) {
                    foreach ($row as $key => $item)
                        $row[$key] = iconv("UTF-8", "GBK", $item); //这里必须转码,不然会乱码
                    fputcsv($fp, $row);
                }
                mysqli_free_result($result); //释放结果集资源
                ob_flush();  //每1万条数据就刷新缓冲区
                flush();
            }
        }
        mysqli_close($con);//断开连接


    }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值