PHP中高级工程师面试重点讲解视频课程
Go快速入门浅显易懂视频教程-基础篇
Go快速入门浅显易懂视频教程-中级篇
PHP导出Excel、CSV、(导出大数据使用ob_flush(),flush())
原创杂文 / 时间:2014-05-06 13:30:22 / 阅读:2414 / 分享:0

 

要点一:
对于导出大量数据不能使用Excel,会导致输出数据不全。
Excel2003限制为65536行就 Excel2007限制为1048576行
对于CSV目前对数据量没有限制,所以大量数据导出选用。

要点二:
PHP处理大数据导出时,要强行刷出缓存在服务器和WEB浏览器中的缓存,避免占满缓存,式程序终止。
使用的函数:ob_flush(); flush();同时使用才会奏效。

生成EXCEL的三张方法:(1)excel:[\t \n] (2)csv: [, \n]  (3)csv: [fputcsv] PHP函数

1.导出EXCEL:主要使用声明头文件、输出格式使用[\t \n]

1

2

3

4

5

6

7

//导出Excel:单元格'\t'分隔,换行\n

header("Content-type:application/vnd.ms-excel");

header("Content-Disposition:filename=excel.xls");

       

echo "A1\t B1\t C1\n";

echo "A2\t B2\t C2\n";

echo "A3\t B3\t c3\n";

2.导出CSV:主要使用声明头文件、输出格式使用[ , \n]

1

2

3

4

5

6

7

8

//导出CSV:单元格','分隔,换行\n

header('Content-Type: application/vnd.ms-excel');

header('Content-Disposition: attachment;filename=csv.csv');

header('Cache-Control: max-age=0');

               

echo "A1, B1, C1\n";

echo "A2, B2, C2\n";

echo "A3, B3, c3\n";

3.导出大量数据:百万以上的实现如下(注意不要一次获取mysql大量数据,可以去ID再去生成CSV,在循环去库中拿数据)fputcsv

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

set_time_limit(0);

error_reporting(0);

  

// 输出Excel文件头,可把user.csv换成你要的文件名

header('Content-Type: application/vnd.ms-excel');

header('Content-Disposition: attachment;filename="user.csv"');

header('Cache-Control: max-age=0');

  

$fp fopen('/tmp/export/data.csv''a');

$head array('UID''EMAIL''注册时间''第一次登陆时间');

foreach ($head as $i => $v) {

    // CSV的Excel支持GBK编码,一定要转换,否则乱码

    $head[$i] = iconv('utf-8''gbk'$v);

}

fputcsv($fp$head);

      

$result array(.................................);

  

foreach($resutl as $val){

    ob_flush();

    flush();

      

     // 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可

    $sql "SELECT uid,email,regdate,lastlogintime FROM reg_members WHERE email in ($val) ORDER BY uid ASC, regdate ASC";

    $query $db_reg_read -> query($sql);

    while ($res $db_reg_read -> fetch_array($query)) {

        $email strtolower($res['email']);

        $list[] = $res;

    }

      

    //对数据进行整理   

      

    //输入到CSV中

    foreach($list as $key => $val){

        $row[0] = iconv('utf-8''gbk'$val['uid']);

        $row[1] = iconv('utf-8''gbk'$val['email']);

        $row[2] = iconv('utf-8''gbk'$val['regdate']);

        $row[3] = iconv('utf-8''gbk'$val['lastlogintime']); 

        fputcsv($fp$row);

    }   

}

关于作者
按时间分类