PHP导出CSV

摘要:不适用插件,直接使用php

/**
     * TODO 导出CSV文件
     * 
     * @param array $data
     * @param array $header_data
     * @param string $file_name
     */
    function e_export_csv($data = array(), $header_data = array(), $file_name = '')
    {
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename='.$file_name);
        header('Cache-Control: max-age=0');
        $fp = fopen('php://output', 'a');
        if (!empty($header_data)) {
            foreach ($header_data as $key => $value) {
                $header_data[$key] = iconv('utf-8', 'gbk', $value);
            }
            fputcsv($fp, $header_data);
        }
        $num = 0;
        //每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
        $limit = 100000;
        //逐行取出数据,不浪费内存
        $count = count($data);
        if ($count > 0) {
            for ($i = 0; $i < $count; $i++) {
                $num++;
                //刷新一下输出buffer,防止由于数据过多造成问题
                if ($limit == $num) {
                    ob_flush();
                    flush();
                    $num = 0;
                }
                $row = $data[$i];
                foreach ($row as $key => $value) {
                    $row[$key] = iconv('utf-8', 'gbk', $value);
                }
                fputcsv($fp, $row);
            }
        }
        fclose($fp);
        exit(0);
    }
评论
  • 2018-11-22 11:36:26 by Eric Guo
    遇到个奇怪的问题,用的是windows的主机,在自己的电脑上设置过编码可以导出正常,在这个windows服务器上就会报错,最后直接不做任何的编码设置就可以了,神奇的windows
  • 2018-11-22 11:04:11 by Eric Guo
    一个奇怪的bug,在火狐打开是正常的,在谷歌打开中文会乱码,解决方法时在所有的输出钱加上 print(chr(0xEF).chr(0xBB).chr(0xBF)); 也就是这里$row[$key] = iconv('utf-8', 'gbk', $value);的前面加上
  • 2018-11-14 15:04:44 by Eric Guo
    找到问题了,是因为少了一个?问号var url = '__CONTROLLER__/payment_export_csv?'+ data; 这样就可以了
  • 2018-11-14 15:00:08 by Eric Guo
    发现一个错误,之前说的 打开一个页面用get出错了,在TP3.2中无法获取到对应的数据
  • 2018-11-12 13:04:13 by Eric Guo
    所以有两种备选方法:1、form表单提交2、 var data = $('#approve_search_form').serialize(); var url = '__CONTROLLER__/payment_export_csv/'+ data; 在打开一个新链接然后进行操作
  • 2018-11-12 13:03:28 by Eric Guo
    直接用ajax导出的化不行,会直接在控制台输出csv的内容,ajax方式请求的数据只能存放在javascipt内存空间,可以通过javascript访问,但是无法保存到硬盘,因为javascript不能直接和硬盘交互
  • 2018-11-12 11:13:09 by Eric Guo
    还有在header的名字中发现一个奇怪的问题,使用小写就没有问题,大写就会报错
  • 2018-11-12 11:12:40 by Eric Guo
    exit(0) 可以防止最后出现奇怪的html